既存のサードパーティの.NET Webサービスに基づいてJava Webサービスを作成しました。この私のWebサービス・インターフェースである:私は正常にこのようにするJava WebサービスクライアントからのSOAPメッセージを受信Java Webサービス:null要求パラメータ
package externalqueryadapter.service._01.responsereceiver;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Action;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
import org.datacontract.schemas._2004._07.commonservices_externalqueryadapter.ExternalResponse;
@WebService(name = "ResponseReceiver", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver")
@XmlSeeAlso({
externalqueryadapter.service._01.responsereceiver.ObjectFactory.class,
org.datacontract.schemas._2004._07.commonservices_externalqueryadapter_contract.ObjectFactory.class
})
public interface ResponseReceiver {
@WebMethod(operationName = "ReceiveResponse")
@RequestWrapper(localName = "ReceiveResponse", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver", className = "externalqueryadapter.service._01.responsereceiver.ReceiveResponse")
@ResponseWrapper(localName = "ReceiveResponseResponse", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver", className = "externalqueryadapter.service._01.responsereceiver.ReceiveResponseResponse")
@Action(input = "http://Service.ExternalQueryAdapter/01/ResponseReceiver/ResponseReceiver/ReceiveResponseRequest", output = "http://Service.ExternalQueryAdapter/01/ResponseReceiver/ResponseReceiver/ReceiveResponseResponse")
public void receiveResponse(
@WebParam(name = "response", targetNamespace = "http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract")
ExternalResponse response);
}
そして、私のExternalResponseクラス
package org.datacontract.schemas._2004._07.commonservices_externalqueryadapter_contract;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.datatype.XMLGregorianCalendar;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "externalResponse", propOrder = {
"requestTime",
"userID"
})
public class ExternalResponse {
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar requestTime;
protected String userID;
public XMLGregorianCalendar getRequestTime() {
return requestTime;
}
public void setRequestTime(XMLGregorianCalendar value) {
this.requestTime = value;
}
public String getUserID() {
return userID;
}
public void setUserID(String value) {
this.userID = value;
}
}
:
<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>
<ReceiveResponse
xmlns="http://Service.ExternalQueryAdapter/01/ResponseReceiver">
<response
xmlns="">
<RequestTime>2013-01-30T20:00:00.000Z</RequestTime>
<userID>olololo</userID>
</response>
</ReceiveResponse>
</soapenv:Body>
</soapenv:Envelope>
しかし、SOAPメッセージの場合応答パラメータの名前空間を含んでいます(サードパーティのWebServiceクライアントからのメッセージです(私は.NETクライアントだと思います))Java WebServiceはnull
を受け取ります回答はExternalResponse
です。
<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>
<ReceiveResponse
xmlns="http://Service.ExternalQueryAdapter/01/ResponseReceiver">
<response
xmlns="http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract">
<RequestTime>2013-01-30T20:00:00.000Z</RequestTime>
<userID>olololo</userID>
</response>
</ReceiveResponse>
</soapenv:Body>
</soapenv:Envelope>
package-info.java:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.datacontract.schemas._2004._07.CommonServices_ExternalQueryAdapter_Contract;
私のJava Webサービスで間違っていますか?
質問するpackage-info.javaを追加しました。いいえ、package-info.classは私の戦争アーカイブに含まれています。私はサードパーティのWebService WSDL/XSDにアクセスしていないので、WSDL/XSDスキーマからクラスを生成しませんでした。 NetBeans - > New - > WebServiceを介してWebサービスを作成し、ExternalResponseクラスを手動で追加しました –
WSDL/XSDを投稿する可能性がありますか?私は個人的には助けることができますが、他の誰かが助けることができるかどうかはわかりません。 –