4

Spring WS バージョン 1.5.8 を使用しています。私の応答は次のようになります。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
   <SOAP-ENV:Header/> 
   <SOAP-ENV:Body> 
      ...
   </SOAP-ENV:Body> 
</SOAP-ENV:Envelope>

ただし、私のクライアント (私が統合した相手) では、解析を成功させるために名前空間の宣言を追加する必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">          
    <soapenv:Body> 
         ... 
    </soapenv:Body> 
</soapenv:Envelope> 

どうすればいいですか?

4

1 に答える 1

5

特定の名前空間宣言が存在することを必要とする SOAP クライアントは、それらの名前空間がドキュメントで使用されていない場合に壊れていることを、おそらく私が言う必要はありません。だから私はそれについて言及しません。

ただし、そのように応答を変更したい場合は、EndpointInterceptor、具体的にはSoapEndpointInterceptor. ここで説明されているように、エンドポイント インターセプターを関連付けることができます。

カスタムインターセプターは、メソッドを実装し、必要なものをhandleResponseキャストmessageContext.getResponse()して追加できます。SoapMessage

public class MyInterceptor implements SoapEndpointInterceptor {

    public boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception {
        SoapMessage message = (SoapMessage) messageContext.getResponse();
        message.getEnvelope().addNamespaceDeclaration(....);
        return true;
    }

    // ... other methods here
}

ただし、このような低レベルの名前空間宣言を追加すると、副作用が生じる可能性があるため、慎重に行ってください。

于 2010-05-11T18:43:59.960 に答える