Проблема заказа элементов тела запроса Java-SOAP в Spring Boot - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь использовать веб-службы 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>
 * &lt;complexType name="UserListRequest">
 *   &lt;complexContent>
 *     &lt;extension base="{http://..../..Services}APIArguments">
 *       &lt;sequence>
 *         &lt;element name="Reference" type="{http://..../..Services}UserListReferenceTypes"/>
 *         &lt;element name="Number" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>

 *       &lt;/sequence>
 *     &lt;/extension>
 *   &lt;/complexContent>
 * &lt;/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>
 * &lt;complexType name="Header">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="MessageID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="CorrelationID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="SystemID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="RequestorID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="InstitutionID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/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 и наоборот.

Может кто-нибудь предложить это.

...