Я создал клиента веб-службы с использованием командной строки wsimport (JAX-WS) и сгенерированных объектов Java с использованием JAXB и отдельных XSD-файлы.Клиент JAX-WS, неправильный запрос на мыло. Разметка в документе, следующий за корневым элементом, должна быть хорошо сформирована.
Но когда я пытаюсь выполнить запрос, он дает следующую ошибку со стороны сервера.
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. Клиент веб-службы генерируется мыльный сообщение.
<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 { }
- обслуживание клиентов веб - интерфейс службы (Обновлено 17-Oct-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 класс (Обновлено 17-Oct-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 (Обновлено 17 октября 2014 года)
@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;
}
}
- Мой тест Класс (Обновлено 17-Oct-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
Надеюсь, вы принимаете ObjectFactory, так как я обновил проблему со всей информацией, которую я имею, включая тестовый класс. Спасибо за проверку. – Unknown
Когда значение пуста для @XmlType (name = "", propOrder = {"hotelCode"}) в MyDetailRQ, я получаю следующую ошибку. 'org.apache.cxf.interceptor.Fault: Ошибка маршаллинга: экземпляр «com.myp.hi.dataobject.MyDetailRQ» заменяет «java.lang.Object», но «com.mpy.hi.dataobject.MyDetailRQ» является связанный с анонимным типом ». – Unknown