Я получил проект SOAP с JAX-WS, и в моем файле WSDL атрибут elementFormDefault
установлен на qualified
. Из-за этого сгенерированный запрос xml имеет пространство имен (proj :) перед всеми элементами:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:proj="http://my-project.com/Project">
<soapenv:Header/>
<soapenv:Body>
<proj:Consultation>
<proj:Header>
<proj:WSVersion>value</proj:WSVersion>
<proj:TimeRequete>value</proj:TimeRequete>
<proj:IDRequest>value</proj:IDRequest>
</proj:Header>
<proj:Element1>value</proj:Element1>
<proj:Element2>value</proj:Element2>
<proj:limit>value</proj:limit>
</proj:Consultation>
</soapenv:Body>
</soapenv:Envelope>
Проблема в том, что на стороне сервера все элементы, которые я получаю, являются нулевыми. Но когда я удаляю тег namespace из элементов (например, когда атрибут elementFormDefault
установлен в unqualified
), я могу получить доступ ко всем своим элементам, и он работает отлично. Например:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:proj="http://my-project.com/Project">
<soapenv:Header/>
<soapenv:Body>
<proj:Consultation>
<Header>
<WSVersion>value</proj:WSVersion>
<TimeRequete>value</proj:TimeRequete>
<IDRequest>value</proj:IDRequest>
</Header>
<Element1>value</proj:Element1>
<Element2>value</proj:Element2>
<limit>value</proj:limit>
</proj:Consultation>
</soapenv:Body>
</soapenv:Envelope>
К сожалению, я не могу изменить elementFormDefault
на unqualified
: я не могу изменить файл WSDL ... и все сгенерированные запросы получили тег пространства имен "proj:" перед элементом в запросе xml.
Я искал, и я уверен, что это проблема пространства имен с некоторыми аннотациями, как в @WebResult, @WebMethod et c. на стороне сервера, но я попытался изменить все это, установить пространства имен, удалить их ... Кажется, это не работает.
Вот мой файл WSDL:
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://my-project.com/Project"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MyProject"
targetNamespace="http://my-project.com/Project"
>
<wsdl:types>
<xsd:schema elementFormDefault="qualified" targetNamespace="http://my-project.com/Project" xmlns:tns="http://my-project.com/Project">
<xsd:element name="DefaultFault">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" name="CodeError" type="xsd:string"/>
<xsd:element minOccurs="1" name="LibelleError" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="Element1Type">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Element2Type">
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
<xsd:maxLength value="30"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Element3Type">
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
<xsd:maxLength value="30"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Element4Type">
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
<xsd:maxLength value="20"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Element5Type">
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
<xsd:maxLength value="10"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Element6Type">
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="Consultation">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header" type="tns:HeaderRequeteType"/>
<xsd:element minOccurs="0" name="Element1" type="tns:Element1Type"/>
<xsd:element minOccurs="0" name="Element2" type="tns:Element2Type"/>
<xsd:element minOccurs="0" name="limit" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ConsultationResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header" type="tns:HeaderReponseType"/>
<xsd:element name="Element3" type="tns:Element3Type"/>
<xsd:element name="offset" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Update">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header" type="tns:HeaderRequeteType"/>
<xsd:element minOccurs="0" name="Element4" type="tns:Element4Type"/>
<xsd:element minOccurs="0" name="Element5" type="tns:Element5Type"/>
<xsd:element name="data" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="UpdateResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header" type="tns:HeaderReponseType"/>
<xsd:element name="Element6" type="tns:Element6Type"/>
<xsd:element name="element" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="HeaderRequeteType">
<xsd:sequence>
<xsd:element name="WSVersion" type="xsd:string"/>
<xsd:element name="TimeRequete" type="xsd:dateTime"/>
<xsd:element name="IDRequest" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="HeaderReponseType">
<xsd:sequence>
<xsd:element name="WSVersion" type="xsd:string"/>
<xsd:element name="TimeReponse" type="xsd:dateTime"/>
<xsd:element name="TimeRequete" type="xsd:dateTime"/>
<xsd:element name="IDResponse" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="MyProject_DefaultFaultMessage">
<wsdl:part name="fault" element="tns:DefaultFault" />
</wsdl:message>
<wsdl:message name="MyProject_Consultation_InputMessage">
<wsdl:part name="request" element="tns:Consultation"/>
</wsdl:message>
<wsdl:message name="MyProject_Consultation_OutputMessage">
<wsdl:part name="response" element="tns:ConsultationResponse"/>
</wsdl:message>
<wsdl:message name="MyProject_Update_InputMessage">
<wsdl:part name="request" element="tns:Update"/>
</wsdl:message>
<wsdl:message name="MyProject_Update_OutputMessage">
<wsdl:part name="response" element="tns:UpdateResponse"/>
</wsdl:message>
<wsdl:portType name="MyProject">
<wsdl:operation name="Consultation">
<wsdl:input message="tns:MyProject_Consultation_InputMessage"/>
<wsdl:output message="tns:MyProject_Consultation_OutputMessage"/>
<wsdl:fault name="defaultFault" message="tns:MyProject_DefaultFaultMessage"/>
</wsdl:operation>
<wsdl:operation name="Update">
<wsdl:input message="tns:MyProject_Update_InputMessage"/>
<wsdl:output message="tns:MyProject_Update_OutputMessage"/>
<wsdl:fault name="defaultFault" message="tns:MyProject_DefaultFaultMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BasicHttpBinding_MyProject" type="tns:MyProject">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Consultation">
<soap:operation soapAction="http://my-project.com/Project/Consultation" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="defaultFault">
<soap:fault name="defaultFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Update">
<soap:operation soapAction="http://my-project.com/Project/Update" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="defaultFault">
<soap:fault name="defaultFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyProject">
<wsdl:port name="BasicHttpBinding_MyProject" binding="tns:BasicHttpBinding_MyProject">
<soap:address location="http://my-project.com/Project"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Реализация Java:
package web.service.server.myproject;
@WebService(name = "myProject", targetNamespace = "http://my-project.com/Project")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class MyProjectServiceImpl implements MyProjectService {
@Override
@WebMethod(operationName = "Consultation", action = "http://my-project.com/Project/Consultation")
@WebResult(name = "ConsultationResponse", targetNamespace = "http://my-project.com/Project", partName = "response")
public ConsultationResponse consultation(Consultation request)
throws MyProjectDefaultMessage {
// some code...
}
@Override
@WebMethod(operationName = "Update", action = "http://my-project.com/Project/Update")
@WebResult(name = "UpdateResponse", targetNamespace = "http://my-project.com/Project", partName = "response")
public UpdateResponse update(Update request)
throws MyProjectDefaultMessage {
// some code ...
}
}
И некоторые элементы:
package web.service.server.myproject.types;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"header",
"element1",
"element2",
"limit"
})
@XmlRootElement(name = "Consultation")
public class Consultation {
@XmlElement(name = "Header", required = true)
protected HeaderRequeteType header;
@XmlElement(name = "Element1")
protected String element1;
@XmlElement(name = "Element2")
protected String element2;
protected Integer limit;
// getters and setters
}
и
package web.service.server.myproject.types;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "EnteteRequeteType", propOrder = {
"VersionWS",
"timeRequete",
"idRequest",
})
public class HeaderRequeteType {
@XmlElement(name = "WVersionS", required = true)
protected String versionWS;
@XmlElement(name = "TimeRequete", required = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar timeRequete;
@XmlElement(name = "IDRequest", required = true)
protected String idRequest;
// getters and setters
}
Я также попытался добавить в @XmlType пространство имен, но это не сработало
Примечание:
- Я изменил имена и т.д. c. из WSDL и кода java, чтобы было проще анализировать. Я также сильно их уменьшил. Если есть какие-то небольшие опечатки, это не проблема.
- На стороне сервера кажется, что он распознает запрос как объект «Консультация» или «Обновление», но все внутри равно нулю ( Header, Element1, Element2 ...)
- Если вам нужно больше информации, не стесняйтесь спрашивать
Если кто-то может мне помочь, я был бы очень благодарен, эта проблема на самом деле ведет я безумен Спасибо!