我已經使用wsimport命令行(JAX-WS)生成了Web服務客戶端,並使用JAXB生成了Java對象並將其分開XSD文件。JAX-WS客戶端,不正確的soap請求 - 根元素之後的文檔中的標記必須格式良好
但是,當我嘗試請求時,它會從服務器端提供以下錯誤。
SAXException, cause: The markup in the document following the root element must be well-formed.
所以我檢查了我的肥皂請求與示例工作肥皂消息。然後我意識到這兩條消息之間有一個不同。
1.示例工作消息。
<m:getMyDetail xmlns:m="http://axis.frontend.hi.example.net"> <MyDetailRQ xmlns="http://www.example.net/schemas/1005/06/messages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.net/1005/06/messages ../xsd/MyDetailRQ.xsd" version="2013/12">
2. Web服務客戶端生成的SOAP消息。
<ns3:getMyDetail xmlns:ns3="http://axis.frontend.hi.example.net" xmlns="http://www. example.net/schemas/1005/06/messages" xmlns:ns2="http://www. example.net/wsdl/1005/06" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MyDetailRQ">
正如你可以看到,預期MyDetailRQ包裝標籤元件上方是缺少,但它作爲產生的xsi:類型= 「MyDetailRQ」 屬性。
我不知道爲什麼會發生這種情況,以及如何通過我的客戶端項目配置來解決此問題。
感謝您的幫助和建議。
感謝
- 相關WSDL部分
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://axis.frontend.h1.example.com">
<element name="getMyDetail" type="xsd:anyType"/>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/wsdl/2005/06">
<element name="getMyDetailReturn" type="xsd:anyType"/>
</schema>
</wsdl:types>
<wsdl:message name="getMyDetailRequest">
<wsdl:part element="tns1:getMyDetail" name="part"/>
</wsdl:message>
<wsdl:message name="getMyDetailResponse">
<wsdl:part element="impl:getMyDetailReturn" name="getMyDetailReturn"/>
</wsdl:message>
<wsdl:portType name="MyService">
<wsdl:operation name="getMyDetail">
<wsdl:input message="impl:getMyDetailRequest" name="getMyDetailRequest"/>
<wsdl:output message="impl:getMyDetailResponse" name="getMyDetailResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MyServiceSoapBinding" type="impl:MyService">
<wsdl:operation name="getMyDetail">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getMyDetailRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getMyDetailResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyServiceService">
<wsdl:port binding="impl:MyServiceSoapBinding" name="MyService">
<wsdlsoap:address location="http://interface.example.com/xmls/ws/MyService"/>
</wsdl:port>
</wsdl:service>
- 相關XSD部分
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.example.net/schemas/1005/06/messages" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.net/schemas/1005/06/messages" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="MyCommonTypes.xsd"/>
<xs:element name="MyDetailRQ">
- 相關的Java對象
@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "MyDetailRQ", propOrder = { "myCode" }) @XmlRootElement(name = "MyDetailRQ") public class MyDetailRQ extends MainRequest { }
- Web服務客戶端 - 服務接口(更新於10月17日2014)
@WebService(name = "MyService", targetNamespace = "http://www.example.net/wsdl/1005/06")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
com.myp.hi.frontend.axis.ObjectFactory.class,
com.myp.ObjectFactory.class
})
public interface MyService {
/**
*
* @param part
* @return
* returns java.lang.Object
*/
@WebMethod
@WebResult(name = "getMyDetailReturn", targetNamespace = "http://www.example.net/wsdl/1005/06", partName = "getMyDetailReturn")
public Object getMyDetail(
@WebParam(name = "getMyDetail", targetNamespace = "http://axis.frontend.hi.example.net", partName = "part")
Object part);
}
- ObjectFactory類(更新於10月17日2014)
@XmlRegistry
public class ObjectFactory {
private final static QName _GetMyDetail_QNAME = new QName("http://axis.frontend.hi.example.net", "getMyDetail");
public ObjectFactory() {
}
@XmlElementDecl(namespace = "http://axis.frontend.hi.example.net", name = "getMyDetail")
public JAXBElement<Object> createGetMyDetail(Object value) {
return new JAXBElement<Object>(_GetMyDetail_QNAME, Object.class, null, value);
}
}
-MyServiceService class(2014年10月17日更新)
@WebServiceClient(name = "MyServiceService", targetNamespace = "http://www.example.net/wsdl/1005/06", wsdlLocation = "http://interface.example.com/xmls/ws/MyService?wsdl")
@GZIP
public class MyServiceService
extends Service
{
private final static URL MYSERVICESERVICE_WSDL_LOCATION;
private final static WebServiceException MYSERVICESERVICE_EXCEPTION;
private final static QName MYSERVICESERVICE_QNAME = new QName("http://www.example.net/wsdl/1005/06", "MyServiceService");
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL("http://interface.example.com/xmls/ws/MyService?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
MYSERVICESERVICE_WSDL_LOCATION = url;
MYSERVICESERVICE_EXCEPTION = e;
}
@WebEndpoint(name = "MyService")
public MyService getMyService() {
MyService port = super.getPort(new QName("http://www.example.net/wsdl/1005/06", "MyService"), MyService.class);
return port;
}
private static URL __getWsdlLocation() {
if (MYSERVICESERVICE_EXCEPTION!= null) {
throw MYSERVICESERVICE_EXCEPTION;
}
return MYSERVICESERVICE_WSDL_LOCATION;
}
}
- 我的測試類(更新於10月17日2014)
MyService myService = new MyServiceService().getMyService();
MyDetailRQ myDetailRQ = new MyDetailRQ();
myDetailRQ.setCredentials(credentials);
myDetailRQ.setLanguage("ENG");
myDetailRQ.setMyCode("52319");
MyDetailRS myDetailRS = (MyDetailRS) myService.getMyDetail(myService);
如何構建'getMyDetail'實例? – lexicore 2014-10-16 20:39:14
我希望你正在關注ObjectFactory,任何我已經更新了包含測試類的所有信息的問題。 感謝您的檢查。 – Unknown 2014-10-17 05:01:29
當在MyDetailRQ中將空白設置爲@XmlType(name =「」,propOrder = {「hotelCode」})時,出現以下錯誤。 'org.apache.cxf.interceptor.Fault:編組錯誤:「com.myp.hi.dataobject.MyDetailRQ」的實例將替換爲「java.lang.Object」,但「com.mpy.hi.dataobject.MyDetailRQ」爲綁定到匿名類型「。 – Unknown 2014-10-17 06:50:35