2015-05-13 84 views
1

我在WSO2上爲Lotus Domino Web服務創建了一個通過代理。 這裏是服務的WSDL:這個代理的WSO2中的Lotus Domino Web服務通過代理服務

<?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源視圖:

<?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> 

問題是,當我試圖測試(通過測試WSO2面板(tryit))。測試消息:

<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> 

使用HttpSoap12Endpoint的迴應是:

<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> 

使用HttpSoap11Endpoint的迴應是:

<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> 

調解信息跟蹤器給了我這樣的:

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> 

上WSO2服務器控制檯我得到這個:

[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 

我注意到,有來多米諾WebService的(我登錄要求輸入值,日誌爲空)沒有請求。

我不知道問題出在哪裏以及如何解決問題才能解決問題......你知道該怎麼做嗎?

回答

1

已解決。我創建的自定義代理服務器(不直通!)財產在inSequence中:

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

,然後一切工作正常:)

0

Domino Web Service無需任何身份驗證即可訪問(在SOAPUI中,我可以毫無問題地測試它)。 我試圖與RPC /編碼的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> 

但得到相同的SAXParserException:文件過早結束。 在WSO2控制檯上,與以前相同的警告和錯誤。

0

我爲這個Domino Web服務編寫了一些java「包裝器」服務。我發現,我必須設置

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

有這個包裝工作正常。在得到相同的SAXParserException之前。是否有任何將HTTPConstants.CHUNKED設置爲false的WSO2屬性?