Я пытаюсь использовать веб-службы SOAP, поэтому сгенерировал классы из wsdl с помощью AXIS.
Я выполнил реализацию для клиента SOAP и вызвал сервер SOAP.SOAP-клиент может подключиться к SOAP-серверу, но при обращении к SOAP-серверу из SOAP-клиента изменяется тело запроса, которое изменяется.
Подробности см. Ниже:
Запрос SOAP UI:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prim="http://..../..Services">
<soapenv:Header />
<soapenv:Body>
<prim:UserList>
<prim:XMLRequest>
<prim:Header>
<prim:MessageID>1</prim:MessageID>
<prim:CorrelationID>1</CorrelationID>
</prim:Header>
<prim:Number>1</prim:Number>
</prim:XMLRequest>
</prim:UserList>
</soapenv:Body>
</soapenv:Envelope>
Клиент, отправляющий запрос на сервер:
<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>
<UserList xmlns="hhttp://..../..Services">
<XMLRequest>
<Number>1</Number>
<header>
<MessageID>1</MessageID>
<CorrelationID>1</CorrelationID>
</header>
</XMLRequest>
</UserList>
</soapenv:Body>
</soapenv:Envelope>
Code:
public UserListResponse UserListService(UserList request)
throws RemoteException, ServiceException {
UserListRequest xmlRequest = new UserListRequest();
Header reqHeader = request.getXMLRequest().getHeader();
Header header = new Header();
header.setCorrelationID(reqHeader.getCorrelationID());
header.setMessageID(reqHeader.getMessageID());
xmlRequest.setHeader(header);
return soapStub.UserList(xmlRequest);
}
Код UserListRequest:
<code>/**
* <p>Java class for UserListRequest complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="UserListRequest">
* <complexContent>
* <extension base="{http://..../..Services}APIArguments">
* <sequence>
* <element name="Reference" type="{http://..../..Services}UserListReferenceTypes"/>
* <element name="Number" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* </sequence>
* </extension>
* </complexContent>
* </complexType>
*
* * * / @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "UserListRequest ", propOrder = {" reference "," number "}) открытый класс UserListRequest extendsAPIArguments реализует java.io.Serializable {/ ** * * / private static final long serialVersionUID = 1L;@XmlElement (name = "Reference", обязательный = true) @XmlSchemaType (name = "string") защищенная ссылка UserListReferenceTypes;@XmlElement (name = "Number") защищенный номер строки;/ ** * Получает значение ссылочного свойства.* * @return * возможным объектом является * {@link UserListReferenceTypes} * * / public UserListReferenceTypes getReference () {return reference;} / ** * Устанавливает значение ссылочного свойства.* * @param value * допустимым объектом является * {@link UserListReferenceTypes} * * / public void setReference (значение UserListReferenceTypes) {this.reference = value;} / ** * Получает значение свойства number.* * @return * возможным объектом является * {@link String} * * / public String getNumber () {return number;} / ** * Устанавливает значение свойства number.* * @param value * допустимым объектом является * {@link String} * * / public void setNumber (String value) {this.number = value;} // Тип метаданных private static org.apache.axis.description.TypeDesc typeDesc = new org.apache.axis.description.TypeDesc (UserListRequest.class, true);static {typeDesc.setXmlType (новый javax.xml.namespace.QName ("http: //..../..Services", "UserListRequest"));org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc ();elemField.setFieldName ( "ссылка");elemField.setXmlName (новый javax.xml.namespace.QName ("http: //..../..Services", "Reference"));elemField.setXmlType (новый javax.xml.namespace.QName ("http: //..../..Services", "UserListReferenceTypes"));elemField.setNillable (ложь);typeDesc.addFieldDesc (elemField);elemField = new org.apache.axis.description.ElementDesc ();elemField.setFieldName ( "число");elemField.setXmlName (новый javax.xml.namespace.QName ("http: //..../..Services", "Number"));elemField.setXmlType (new javax.xml.namespace.QName ("
http://www.w3.org/2001/XMLSchema"," string ")); elemField.setMinOccurs (0); elemField.setNillable (false); typeDesc.addFieldDesc (elemField);} / ** * Returnтип объекта метаданных * / public static org.apache.axis.description.TypeDesc getTypeDesc () {return typeDesc;} / ** * Получить пользовательский сериализатор * / public static org.apache.axis.encoding.Serializer getSerializer (java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) {вернуть новый org.apache.axis.encoding.ser.BeanSerializer (_javaType, _xmlType, typeDesc);} / ** * Получить пользовательский вариант/ public static org.apache.axis.encoding.Deserializer getDeserializer (java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) {returnновый org.apache.axis.encoding.ser.BeanDeserializer (_javaType, _xmlType, typeDesc);}}
Код заголовка:
<code>/**
* <p>Java class for Header complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="Header">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="MessageID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="CorrelationID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="SystemID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="RequestorID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="InstitutionID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
*
* * * / @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "Заголовок", propOrder = {"messageID", "correlationID", "systemID", "requestorID"}) открытый класс Header {@XmlElement (name = "MessageID") защищенный String messageID;@XmlElement (name = "CorrelationID") защищенный String correlationID;@XmlElement (name = "SystemID") защищенный String systemID;@XmlElement (name = "RequestorID") защищенный String requestorID;public Header () {} public Header (java.lang.String messageID, java.lang.String correlationID, java.lang.String systemID, java.lang.String requestorID) {this.messageID = messageID;this.correlationID = correlationID;this.systemID = systemID;this.requestorID = requestorID;} / ** * Получает значение свойства messageID.* * @return * возможным объектом является * {@link String} * * / public String getMessageID () {return messageID;} / ** * Устанавливает значение свойства messageID.* * @param value * допустимым объектом является * {@link String} * * / public void setMessageID (String value) {this.messageID = value;} / ** * Получает значение свойства correlationID.* * @return * возможным объектом является * {@link String} * * / public String getCorrelationID () {return correlationID;} / ** * Устанавливает значение свойства correlationID.* * @param value * допустимым объектом является * {@link String} * * / public void setCorrelationID (String value) {this.correlationID = value;} / ** * Получает значение свойства systemID.* * @return * возможным объектом является * {@link String} * * / public String getSystemID () {return systemID;} / ** * Устанавливает значение свойства systemID.* * @param value * допустимым объектом является * {@link String} * * / public void setSystemID (String value) {this.systemID = value;} / ** * Получает значение свойства requestorID.* * @return * возможным объектом является * {@link String} * * / public String getRequestorID () {return requestorID;} / ** * Устанавливает значение свойства requestorID.* * @param value * допустимым объектом является * {@link String} * * / public void setRequestorID (String value) {this.requestorID = value;} // Тип метаданных private static org.apache.axis.description.TypeDesc typeDesc = new org.apache.axis.description.TypeDesc (Header.class, true);static {typeDesc.setXmlType (new javax.xml.namespace.QName ("http: //..../..Services", "Header", "prim"));org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc ();elemField.setFieldName ( "MessageId");elemField.setXmlName (новое javax.xml.namespace.QName ("http: //..../..Services", "MessageID", "prim"));elemField.setXmlType (new javax.xml.namespace.QName ("
http://www.w3.org/2001/XMLSchema"," string ")); elemField.setMinOccurs (0); elemField.setNillable (false); typeDesc.addFieldDesc (elemField); elemField = new org.ache.axis.description.ElementDesc (); elemField.setFieldName ("correlationID"); elemField.setXmlName (new javax.xml.namespace.QName ("http: //..../..Services", "CorrelationID","prim")); elemField.setXmlType (new javax.xml.namespace.QName ("
http://www.w3.org/2001/XMLSchema"," string "));elemField.setMinOccurs (0);elemField.setNillable (ложь);typeDesc.addFieldDesc (elemField);elemField = new org.apache.axis.description.ElementDesc ();elemField.setFieldName ( "SystemID");elemField.setXmlName (новый javax.xml.namespace.QName ("http: //..../..Services", "SystemID", "prim"));elemField.setXmlType (new javax.xml.namespace.QName ("
http://www.w3.org/2001/XMLSchema"," string ")); elemField.setMinOccurs (0); elemField.setNillable (false); typeDesc.addFieldDesc (elemField); elemField = new org.ache.axis.description.ElementDesc (); elemField.setFieldName ("requestorID"); elemField.setXmlName (new javax.xml.namespace.QName ("http: //..../..Services", "RequestorID","prim")); elemField.setXmlType (new javax.xml.namespace.QName ("
http://www.w3.org/2001/XMLSchema"," string "));elemField.setMinOccurs (0);elemField.setNillable (ложь);typeDesc.addFieldDesc (elemField);elemField = new org.apache.axis.description.ElementDesc ();} / ** * Возвращаемый объект метаданных типа * / public static org.apache.axis.description.TypeDesc getTypeDesc () {return typeDesc;} / ** * Получить пользовательский сериализатор * / public static org.apache.axis.encoding.Serializer getSerializer (java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) {вернуть новую организацию.apache.axis.encoding.ser.BeanSerializer (_javaType, _xmlType, typeDesc);} / ** * Получить пользовательский десериализатор * / public static org.apache.axis.encoding.Deserializer getDeserializer (java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) {вернуть новую организацию.apache.axis.encoding.ser.BeanDeserializer (_javaType, _xmlType, typeDesc);}}
Axis использует Serializer & deSerializer для преобразования в xml и наоборот.
Может кто-нибудь предложить это.