Webサービスのクライアント側の実装に問題があります。私はwsdlを持っており、wsimportツールを使用してクラスを作成しました。
これらのクラスを介してWebサービスを呼び出すと、ログに要求と応答が表示されます...問題ないように見えます。結果オブジェクトには含まれるフィールドに関する定義がないため、クラスを使用してWSから受信したデータを操作することはできません...
そのため、Webサービスから生の応答を取得しようとしていました...これは、SoapHandlerをアタッチすることによって行いました。
BindingProvider bindingProvider = (BindingProvider)port;
List<Handler> handlerChain = new ArrayList<Handler>();
handlerChain.add(new SoapMsgHandler());
bindingProvider.getBinding().setHandlerChain(handlerChain);
result = port.getXmlFromWS();
....
ハンドラーで、メッセージをログに出力するためにhandleMessage(SOAPMessageContext context)メソッドを実装しましたが、問題が発生しました...
以下は、応答を処理する必要があるHandlerクラスの一部です...しかし、次の行で例外が発生します。SOAPMessage message = smc.getMessage()
例外は次のとおりです。
org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
at org.apache.xerces.dom.ParentNode.internalInsertBefore(Unknown Source)
at org.apache.xerces.dom.ParentNode.insertBefore(Unknown Source)
at org.apache.xerces.dom.CoreDocumentImpl.insertBefore(Unknown Source)
at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source)
at org.jboss.ws.core.soap.SOAPDocument.appendChild(SOAPDocument.java:222)
at org.jboss.ws.core.soap.SOAPPartImpl.appendChild(SOAPPartImpl.java:297)
at com.sun.xml.bind.marshaller.SAX2DOMEx.startElement(SAX2DOMEx.java:176)
at com.sun.xml.ws.encoding.TagInfoset.writeStart(TagInfoset.java:168)
at com.sun.xml.ws.message.stream.StreamMessage.writeTo(StreamMessage.java:442)
at com.sun.xml.ws.message.AbstractMessageImpl.readAsSOAPMessage(AbstractMessageImpl.java:193)
at com.sun.xml.ws.handler.SOAPMessageContextImpl.getMessage(SOAPMessageContextImpl.java:79)
ハンドラー実装の一部:
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
public class SoapMsgHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
printTheMsg(context);
return true;
}
private void printTheMsg(SOAPMessageContext smc) {
SOAPMessage message = smc.getMessage(); //this line produces the mentioned exception
....
}
....
}
何が間違っているのかについての助けは非常にありがたいです。