AXIS 1.4 добавляет элементы к пользовательскому типу ошибки - PullRequest
2 голосов
/ 09 декабря 2008

Возможно, кто-то нашел решение для следующей проблемы:

Кажется, что AXIS 1.4 добавляет элементы <exceptionName> и <hostname> к каждому пользовательскому элементу ошибки. В WSDL ошибка определяется как состоящая только из пользовательского сообщения об ошибке systemMessage.

Это ответ, полученный от моего сервиса. Не берите в голову ошибку, это может быть любая ошибка, которая возвращается как ошибка.

<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>
      <soapenv:Fault>
         <faultcode>soapenv:Server.generalException</faultcode>
         <faultstring/>
         <detail>
            <ns1:systemMessage xmlns:ns1="http://my.domain/workflow/engine/wsdl/types">
               <message>nullcvc-datatype-valid.1.2.1: '2008-12-02T00:00:00' is not a valid value for 'date'.cvc-type.3.1.3</message>
               <code>XML string is not valid</code>
               <parameter/>
            </ns1:systemMessage>
            <ns2:exceptionName xmlns:ns2="http://xml.apache.org/axis/">com.domain.commons.ws.schema.SystemMessageType</ns2:exceptionName>
            <ns3:hostname xmlns:ns4="http://xml.apache.org/axis/">my.host.com</ns3:hostname>
         </detail>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Кажется, что это ошибка в Axis 1.4. Кто-нибудь знает обходной путь для этого поведения?

1 Ответ

0 голосов
/ 09 декабря 2008

Для решения проблемы есть:

В сгенерированном AXIS классе сбоев, который происходит от org.apache.axis.AxisFault, измените конструкторы следующим образом для подавления элементов (ниже приведен класс сбоев, который используется для сбоев, возвращаемых в вопросе): *

public SystemMessageType() {
    // Suppress the two elements
    this.removeHostname();
    this.removeFaultDetail(org.apache.axis.Constants.QNAME_FAULTDETAIL_EXCEPTIONNAME);
}

public SystemMessageType(
       java.lang.String message1,
       java.lang.String code,
       java.lang.String[] parameter) {
    // Call the default constructor
    this();
    this.message1 = message1;
    this.code = code;
    this.parameter = parameter;
}

Этот обходной путь решает проблему. Тем не менее, всякий раз, когда вы регенерируете свой код для веб-службы SOAP, вы должны адаптировать класс ошибок.

...