简体   繁体   中英

Lotus Domino Web Service in WSO2 Pass Through Proxy Service

I created a pass through proxy on WSO2 for Lotus Domino Web Service. Here is WSDL of that service:

    <?xml version="1.0" encoding="UTF-8"?>
   <definitions targetNamespace="urn:DefaultNamespace"
    xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap"
    xmlns:impl="urn:DefaultNamespace" xmlns:intf="urn:DefaultNamespace"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <schema targetNamespace="urn:DefaultNamespace" xmlns="http://www.w3.org/2001/XMLSchema">
            <element name="DODAJNAPIS">
                <complexType>
                    <sequence>
                        <element name="WST1INPUT1" type="impl:WST1INPUT" />
                    </sequence>
                </complexType>
            </element>
            <complexType name="WST1INPUT">
                <sequence>
                    <element name="INPUT1" nillable="true" type="xsd:string" />
                    <element name="INPUT2" nillable="true" type="xsd:string" />
                </sequence>
            </complexType>
            <element name="DODAJNAPISResponse">
                <complexType>
                    <sequence>
                        <element name="DODAJNAPISReturn" type="impl:WST1OUTPUT" />
                    </sequence>
                </complexType>
            </element>
            <complexType name="WST1OUTPUT">
                <sequence>
                    <element name="OUTPUT1" nillable="true" type="xsd:string" />
                    <element name="OUTPUT2" nillable="true" type="xsd:string" />
                </sequence>
            </complexType>
        </schema>
    </wsdl:types>
    <message name="DODAJNAPISResponse">
        <part element="impl:DODAJNAPISResponse" name="parameters" />
    </message>
    <message name="DODAJNAPISRequest">
        <part element="impl:DODAJNAPIS" name="parameters" />
    </message>
    <portType name="WSO2ProviderClass">
        <operation name="DODAJNAPIS">
            <input message="impl:DODAJNAPISRequest" name="DODAJNAPISRequest" />
            <output message="impl:DODAJNAPISResponse" name="DODAJNAPISResponse" />
        </operation>
    </portType>
    <binding name="DominoSoapBinding" type="impl:WSO2ProviderClass">
        <wsdlsoap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <operation name="DODAJNAPIS">
            <wsdlsoap:operation soapAction="DODAJNAPIS" />
            <input name="DODAJNAPISRequest">
                <wsdlsoap:body use="literal" />
            </input>
            <output name="DODAJNAPISResponse">
                <wsdlsoap:body use="literal" />
            </output>
        </operation>
    </binding>
    <service name="WSO2ProviderClassService">
        <port binding="impl:DominoSoapBinding" name="Domino">
            <wsdlsoap:address
                location="http://firmaa.mis.eu:80/firmaa/b2b/finanse.nsf/WST1?OpenWebService" />
        </port>
    </service>
</definitions>

WSO2 source view of this proxy:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="WSO2DominoWrappedTest"
       transports="https,http"
       statistics="disable"
       trace="enable"
       startOnLoad="true">
   <target>
      <outSequence>
         <send/>
      </outSequence>
      <endpoint>
         <address uri="http://firmaa.mis.eu/firmaa/b2b/finanse.nsf/WST1?OpenWebService"/>
      </endpoint>
   </target>
   <publishWSDL uri="http://firmaa.mis.eu/firmaa/b2b/finanse.nsf/WST1?WSDL"/>
   <description/>
</proxy>

The problem is when I'm trying to test it (via WSO2 test panel (tryit)). Test message:

<body>
   <p:DODAJNAPIS xmlns:p="urn:DefaultNamespace">
      <!--Exactly 1 occurrence-->
      <WST1INPUT1>
         <!--Exactly 1 occurrence-->
         <INPUT1>ABC</INPUT1>
         <!--Exactly 1 occurrence-->
         <INPUT2>DEF</INPUT2>
      </WST1INPUT1>
   </p:DODAJNAPIS>
</body>

Using HttpSoap12Endpoint the response is:

<TryitProxyError xmlns:h="http://wso2.org/ns/TryitProxy" h:status="SOAP envelope error">org.apache.axis2.AxisFault: 
Transport level information does not match with SOAP Message namespace URI</TryitProxyError>

Using HttpSoap11Endpoint the response is:

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <faultcode>soapenv:Server.generalException</faultcode>
   <faultstring>org.xml.sax.SAXParseException: Premature end of file.</faultstring>
   <detail/>
</soapenv:Fault>

Mediation Message Tracer gives me this:

07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO Proxy Service WSO2DominoWrappedTest received a new message from : 192.168.7.247
07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO Message To: /services/WSO2DominoWrappedTest.WSO2DominoWrappedTestHttpSoap11Endpoint
07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO SOAPAction: DODAJNAPIS
07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO WSA-Action: DODAJNAPIS
07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO Forwarding the message to the anonymous endpoint of the proxy service
07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO Sending message through endpoint : null resolving to address = http://firmaa.mis.eu/firmaa/b2b/finanse.nsf/WST1?OpenWebService
07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO SOAPAction: DODAJNAPIS
07:46:13,071 [-] [PassThroughMessageProcessor-46] INFO WSA-Action: DODAJNAPIS
07:46:13,133 [-] [PassThroughMessageProcessor-48] INFO Start : Sequence <anonymous>
07:46:13,133 [-] [PassThroughMessageProcessor-48] INFO Sequence <SequenceMediator> :: mediate()
07:46:13,133 [-] [PassThroughMessageProcessor-48] INFO Mediation started from mediator position : 0
07:46:13,133 [-] [PassThroughMessageProcessor-48] INFO Start : Send mediator
07:46:13,133 [-] [PassThroughMessageProcessor-48] INFO Sending response message using implicit message properties.. Sending To: http://www.w3.org/2005/08/addressing/anonymous SOAPAction:
07:46:13,133 [-] [PassThroughMessageProcessor-48] INFO End : Send mediator
07:46:13,133 [-] [PassThroughMessageProcessor-48] INFO End : Sequence <anonymous>

On WSO2 server console I get this:

[2015-05-13 07:40:21,024]  WARN - TargetHandler http-outgoing-128: Receiving res
ponse while the handler is in an inconsistent state REQUEST_READY
[2015-05-13 07:40:21,024] ERROR - TargetHandler Unexpected error.
[2015-05-13 07:40:21,024]  WARN - SynapseCallbackReceiver Synapse received a res
ponse for the request with message Id : urn:uuid:b1275096-2ad4-4d2d-92f4-cca5499
027c8 But a callback is not registered (anymore) to process this response

I've noticed that there is no request coming to Domino WebService (I log the input values on request, and the log is empty).

I've no idea where is the problem and how to fix it to get it work... Have you any idea what to do with it?

Solved. I created Custom Proxy (not Passthrough!) with property in inSequence:

<inSequence>
         <property name="FORCE_HTTP_1.0" value="true" scope="axis2"/>
      </inSequence>

and then everything works fine :)

Please check that when allowing anonymous user in the ACL of firmaa/b2b/finanse.nsf, it works. Then you need to solve authentication problem.

Looking further to the WSDL, I think the WS is defined as LITERATE format on the Domino server, look at http://www.ibm.com/developerworks/lotus/library/nd7-webservices/ to change this to RPC/encoded.

Domino Web Service is accessible without any authentication (in SOAPUI I can test it without problems). I tried with RPC/encoded wsdl :

<?xml version="1.0" encoding="UTF-8"?>
<definitions targetNamespace="urn:DefaultNamespace"
    xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap"
    xmlns:impl="urn:DefaultNamespace" xmlns:intf="urn:DefaultNamespace"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <schema targetNamespace="urn:DefaultNamespace" xmlns="http://www.w3.org/2001/XMLSchema">
            <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
            <complexType name="WST1INPUT">
                <sequence>
                    <element name="INPUT1" nillable="true" type="xsd:string" />
                    <element name="INPUT2" nillable="true" type="xsd:string" />
                </sequence>
            </complexType>
            <complexType name="WST1OUTPUT">
                <sequence>
                    <element name="OUTPUT1" nillable="true" type="xsd:string" />
                    <element name="OUTPUT2" nillable="true" type="xsd:string" />
                </sequence>
            </complexType>
        </schema>
    </wsdl:types>
    <message name="DODAJNAPISResponse">
        <part name="DODAJNAPISReturn" type="impl:WST1OUTPUT" />
    </message>
    <message name="DODAJNAPISRequest">
        <part name="WST1INPUT1" type="impl:WST1INPUT" />
    </message>
    <portType name="WSO2ProviderClass">
        <operation name="DODAJNAPIS" parameterOrder="WST1INPUT1">
            <input message="impl:DODAJNAPISRequest" name="DODAJNAPISRequest" />
            <output message="impl:DODAJNAPISResponse" name="DODAJNAPISResponse" />
        </operation>
    </portType>
    <binding name="DominoSoapBinding" type="impl:WSO2ProviderClass">
        <wsdlsoap:binding style="rpc"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <operation name="DODAJNAPIS">
            <wsdlsoap:operation soapAction="DODAJNAPIS" />
            <input name="DODAJNAPISRequest">
                <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                    namespace="urn:DefaultNamespace" use="encoded" />
            </input>
            <output name="DODAJNAPISResponse">
                <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                    namespace="urn:DefaultNamespace" use="encoded" />
            </output>
        </operation>
    </binding>
    <service name="WSO2ProviderClassService">
        <port binding="impl:DominoSoapBinding" name="Domino">
            <wsdlsoap:address
                location="http://firmaa.mis.eu:80/firmaa/b2b/finanse.nsf/WST1?OpenWebService" />
        </port>
    </service>
</definitions>

but get the same SAXParserException: Premature end of file. On WSO2 console the same warn and error as before.

I wrote some java "wrapper" service for this Domino Web Service. I found, that I have to set

options.setProperty(HTTPConstants.CHUNKED, "false");

to have this wrapper working fine. Before I get the same SAXParserException. Is there any WSO2 property that set HTTPConstants.CHUNKED to false?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM