1

我的 Web 服务操作定义如下。我也有一个标题参数。

public void method(@WebParam(name="OrderNo", mode=WebParam.Mode.IN) String order_no_,
                    @WebParam(name="user", mode=WebParam.Mode.IN, header=true) String user) 

现在,当我部署此服务时,我得到一个看起来像这样的 WSDL。

<?xml version="1.0" ?>
<wsdl:definitions ... >
    <wsdl:types>
        </xs:schema>
            ...
            <xs:element name="method" type="tns:method"></xs:element>
            <xs:complexType name="method">
                <xs:sequence>
                    <xs:element minOccurs="0" name="OrderNo" type="xs:string"></xs:element>
                </xs:sequence>
            </xs:complexType>  
            ...
            <xs:element name="user" nillable="true" type="xs:string"></xs:element>
            ...
        </xs:schema>
    </wsdl:types>
    ...
    <wsdl:message name="method">
        <wsdl:part element="tns:method" name="parameters" />
        <wsdl:part element="tns:user" name="user" />
    </wsdl:message>
    ...
    <wsdl:portType name="CustomerOrderService">
        <wsdl:operation name="method">
            <wsdl:input message="tns:method" name="method" />
            <wsdl:output ... /> 
            <wsdl:fault ... />
        </wsdl:operation>
    </wsdl:portType>
    ...
    <wsdl:binding name="OrderSoapBinding" type="tns:OrderService">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
        <wsdl:operation name="method">
            <soap:operation soapAction="" style="document" /> 
            <wsdl:input name="method">
                <soap:header message="tns:method" part="user" use="literal" /> 
                <soap:body parts="parameters" use="literal" /> 
            </wsdl:input>
            <wsdl:output name="...">
                <soap:body use="literal" /> 
            </wsdl:output>
            <wsdl:fault name="...">
                ...
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
</wsdl:definitions>  

如您所见,标头是用作服务请求输入的消息的一部分。Hwen 我使用soap UI 来测试这个WSDL,它生成了一个正确的soap 消息,其中“user”属性作为标题的一部分。

当我将此服务用作 Carbon BPEL 流程中的合作伙伴链接并为调用消息中的“用户”部分分配一个值时,该值不包含在标头中。

<bpel:variable name="method_Input" messageType="ns0:method" />  

<bpel:assign name="...">
   ...
   <bpel:copy>
      <bpel:from>$input.payload/tns:TaskReceiver</bpel:from>
      <bpel:to>$method_Input.user</bpel:to>
   </bpel:copy>
</bpel:assign>

您可以看到消息部分被分配了正确的值,

控制台信息

问题是这个绑定到soap消息头的消息部分永远不会包含在soap头中。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <method xmlns="http://customerorder.service.test/">
            <OrderNo xmlns="">ORD00011</OrderNo>
        </method>
    </soapenv:Body>
</soapenv:Envelope>  

提前感谢提供的任何帮助。

4

0 回答 0