2

我必须向使用 Axis2 的 Web 服务发出请求,我离它工作太近了,但我不断收到错误消息,我确信它在我的 SOAP XML 的构造中。这是 SOAP:

<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
        <soap:Header>
            <RequestsoapHeader>
                <spId>SPID</spId>
                <spPassword>RandomPass</spPassword>
                <timeStamp>20130115160251</timeStamp>
            </RequestsoapHeader>
        </soap:Header>
        <soap:Body>
            <operation>
                <name>getSPToken</name>
                <input>http://zzz.zzz.zzz.zzz/my/redirection/url/</input>
            </operation>
        </soap:Body>
    </soap:Envelope>

更新!!!!现在肥皂是这样的:

<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
        <soap:Header>
            <RequestsoapHeader>
                <spId>SPID</spId>
                <spPassword>RandomPass</spPassword>
                <timeStamp>20130115160251</timeStamp>
            </RequestsoapHeader>
        </soap:Header>
        <soap:Body>
            <getSPTokenRequest>
                <SPredirectURL>http://zzz.zzz.zzz.zzz/my/redirection/url/</SPredirectURL>
            </getSPTokenRequest>
        </soap:Body>
    </soap:Envelope>

我无法修复的部分是 Body,我尝试以不同的方式调用操作,例如代替<operation>i used <operation name="getSPToken">,我也尝试不使用 operation 并创建了一个名称为: 的标签<getSPToken>,但没有任何效果。

这是描述我试图在 Web 服务中调用的操作的 WSDL 部分:

    <wsdl:operation name="getSPToken">
        <soap:operation soapAction="" style="document"/>
        <wsdl:input>
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"/>
        </wsdl:output>
        <wsdl:fault name="ServiceException">
            <soap:fault name="ServiceException" use="literal"/>
        </wsdl:fault>
        <wsdl:fault name="PolicyException">
            <soap:fault name="PolicyException" use="literal"/>
        </wsdl:fault>
    </wsdl:operation>

更新!!!这是我之前没有发布的接口 XML(WSDL 的一部分):

<wsdl:types>
    <xsd:schema elementFormDefault="qualified" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.csapi.org/schema/parlayx/sicoweb/v1_0/local">
        <xsd:element name="getSPTokenRequest" type="osg_sicoweb_local_xsd:getSPTokenRequest"/>
        <xsd:complexType name="getSPTokenRequest">
            <xsd:sequence>
                <xsd:element name="SPredirectURL"
                    type="xsd:string" maxOccurs="1" minOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation></xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>

        <xsd:element name="getSPTokenResponse" type="osg_sicoweb_local_xsd:getSPTokenResponse"/>
        <xsd:complexType name="getSPTokenResponse">
            <xsd:sequence>
                <xsd:element name="SPToken" type="xsd:string"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:schema>
</wsdl:types>

这是我得到的回应:

HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=UTF-8
Date: Tue, 15 Jan 2013 21:10:49 GMT
Connection: close
<?xml version='1.0' encoding='UTF-8'?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Body>
            <soapenv:Fault xmlns:axis2ns73="http://schemas.xmlsoap.org/soap/envelope/">
                <faultcode>axis2ns73:Client</faultcode>
                <faultstring>The endpoint reference (EPR) for the Operation not found is http://xxx.xxx.xxx.xxx:xxx/path/to/service/ and the WSA Action = </faultstring>
                <detail />
            </soapenv:Fault>
        </soapenv:Body>
    </soapenv:Envelope>

更新!!!!随着新的变化,我得到的回应是这样的:

<?xml version='1.0' encoding='UTF-8'?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Body>
            <soapenv:Fault>
                <faultcode>soapenv:Server</faultcode>
                <faultstring>org.apache.axis2.databinding.ADBException: Unexpected subelement getSPTokenRequest</faultstring>
                <detail />
            </soapenv:Fault>
        </soapenv:Body>
    </soapenv:Envelope>

该操作getSPToken接收一个名为 的参数SPredirectURL,其中包含重定向的URL,请帮助。

4

1 回答 1

1

尝试以下其中一项作为您的身体:

<soap:Body>
  <SPredirectURL>http://zzz.zzz.zzz.zzz/my/redirection/url/</SPredirectURL>
</soap:Body>

<soap:Body>
  <getSPTokenRequest xmlns="http://www.csapi.org/schema/parlayx/sicoweb/v1_0/local">
    <SPredirectURL>http://zzz.zzz.zzz.zzz/my/redirection/url/</SPredirectURL>
  </getSPTokenRequest>
</soap:Body>

基于 WSDL 片段,Web 服务端点对消息使用文档/文字约定,但如果没有 WSDL 消息声明,则不清楚是“裸”(第一个示例)还是“包装”(第二个示例)版本。此地址 (http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/) 上的帖子很好地了解了 WSDL 描述的各种方言。

更新:基于 wsdl:types 部分中的模式,服务预期的元素的完全限定名称(基于模式元素的声明的 targetNamespace 属性)是http://www.csapi.org/schema/ parlayx/sicoweb/v1_0/local {getSPTokenRequest}

建立该名称的一种方法(内联命名空间声明)显示在上面更新的第二个正文中。

与下一次迭代一起发回。

于 2013-01-16T04:35:33.573 回答