WSO2 BPS:如何在HEEL调用中将标头值作为消息的一部分传递

时间:2013-03-15 05:17:53

标签: wso2 bpel wso2carbon

我的网络服务操作定义如下。我也有一个头参数。

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流程中将此服务用作合作伙伴链接,并在调用消息中为“user”部分分配值时,该值不包含在标头中。

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

您可以看到消息部分已分配正确的值

Console information

问题是这个绑定到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>  

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

0 个答案:

没有答案