Приветствую всех.
Волей судеб вляпался я в web service замечательного продукта Oracle BI Publisher.
И столкнулся с проблемой - не получается обработать исключения.
Расследование показало, что паблишер шлет soap fault вот таким сообщением:
1.
2.
3.
4.
5.
6.
7.
8.
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>oracle.apps.xdo.webservice.exception.AccessDeniedException: java.lang.SecurityException: Failed to log into BI Publisher: invalid username or password.</faultstring>
<detail>
<oracle.apps.xdo.webservice.exception.AccessDeniedException/>
<ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">some.host</ns1:hostname>
</detail>
</soapenv:Fault>
а в wsdl пишет:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<wsdl:definitions xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://xmlns.oracle.com/oxp/service/PublicReportService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:intf="http://xmlns.oracle.com/oxp/service/PublicReportService" targetNamespace="http://xmlns.oracle.com/oxp/service/PublicReportService">
<!--
WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)
-->
<wsdl:types>
...
<complexType name="AccessDeniedException">
<sequence/>
</complexType>
<element name="fault" type="impl:AccessDeniedException"/>
...
</wsdl:types>
...
<wsdl:message name="AccessDeniedException">
<wsdl:part name="fault" element="impl:fault"/>
</wsdl:message>
...
<wsdl:operation name="login">
<wsdl:input name="loginRequest" message="impl:loginRequest"/>
<wsdl:output name="loginResponse" message="impl:loginResponse"/>
<wsdl:fault name="AccessDeniedException" message="impl:AccessDeniedException"/>
</wsdl:operation>
...
</wsdl:portType>
<wsdl:binding name="PublicReportServiceSoapBinding" type="impl:PublicReportService">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
...
<wsdl:operation name="login">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="loginRequest"><wsdlsoap:body use="literal"/></wsdl:input>
<wsdl:output name="loginResponse"><wsdlsoap:body use="literal"/></wsdl:output>
<wsdl:fault name="AccessDeniedException">
<wsdlsoap:fault name="AccessDeniedException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
...
</wsdl:binding>
...
соответственно, заменив в wsdl element fault на element oracle.apps.xdo.webservice.exception.AccessDeniedException я почти приблизился к нужному результату, то есть стал нормально обрабатывать сообщения вида
1.
2.
3.
4.
5.
6.
7.
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>oracle.apps.xdo.webservice.exception.AccessDeniedException: java.lang.SecurityException: Failed to log into BI Publisher: invalid username or password.</faultstring>
<detail>
<pub:oracle.apps.xdo.webservice.exception.AccessDeniedException xmlns:pub="http://xmlns.oracle.com/oxp/service/PublicReportService"/>
<ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">some.host</ns1:hostname>
</detail>
</soapenv:Fault>
Но добиться обработки оригинального тега
1.
<oracle.apps.xdo.webservice.exception.AccessDeniedException"/>
никак не удается.
наставьте нуба на путь истинный