Ответ Apache Axis без типа - PullRequest
       16

Ответ Apache Axis без типа

1 голос
/ 16 января 2012

У меня есть клиент веб-службы, использующий ось.Он использует стиль документа / литерала и должен иметь пустой ответ, однако сервер настаивает на отправке ответа заголовка внутри мыльного тела следующим образом

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Code>
            <SOAP-ENV:Value>HTTP/1.1 200 OK</SOAP-ENV:Value>
        </SOAP-ENV:Code>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

И, конечно, клиент вызывает исключение десериализатора как следующее

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
 faultActor: 
 faultNode: 
 faultDetail: 
    {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
    at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:145)
    at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
    at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    at org.apache.axis.client.Call.invoke(Call.java:2467)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)

Есть ли способ обойти это исключение вместо использования функции invokeOneWay (что, я полагаю, не очень хороший способ)?

1 Ответ

1 голос
/ 17 января 2012

Решено путем добавления выходных сообщений в сервис.

<xsd:element name="Code" type="codeDT" />
<xsd:complexType name="codeDT">
    <xsd:sequence>
        <xsd:any />
    </xsd:sequence>
</xsd:complexType>
...
<wsdl:message name="Code">
    <wsdl:documentation />
    <wsdl:part name="Code" element="p1:Code" />
</wsdl:message>

Просто изменение типа возврата AXIS_VOID на SOAP_ELEMENT внутри заглушки работает нормально, но да ладно;таким образом я могу получить то, что находится внутри тега значения, даже если оно мне не нужно.

...