首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于带有强制标头的WSDL创建WSO2代理

基于带有强制标头的WSDL创建WSO2代理
EN

Stack Overflow用户
提问于 2012-07-27 16:46:22
回答 1查看 1.1K关注 0票数 0

在我场景中,有一个在WSO2-AS中运行的ESB服务"SolverDummyWS“,并希望在WSO2企业服务总线中为该服务生成一个代理。

因此,我手动为代理创建了wsdl,并添加了一些必需的标头字段。因此,只有代理的wsdl应该具有此标头。标头应该都是强制的和定义的als显式标头。

Proxy-WSDL看起来像这样:

代码语言:javascript
复制
<wsdl:definitions name="SolverDummyProxy"
targetNamespace="http://de.unistuttgart.iaas" xmlns:tns="http://de.unistuttgart.iaas"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<wsdl:types>
    <schema targetNamespace="http://de.unistuttgart.iaas"
        xmlns="http://www.w3.org/2001/XMLSchema">
        <element name="createGrid">
            <complexType>
                <sequence>
                    <element minOccurs="0" name="milliseconds" type="long" />
                </sequence>
            </complexType>
        </element>
        <element name="createGridResponse">
            <complexType>
                <sequence>
                    <element minOccurs="0" name="return" type="string" />
                </sequence>
            </complexType>
        </element>
        <element name="requestHeader">
            <complexType>
                <sequence>
                    <element minOccurs="1" name="simulationId" type="long" />
                    <element minOccurs="1" name="activityId" type="long" />
                    <element minOccurs="1" name="requiredPolicy" type="anyType" />
                    <element minOccurs="1" name="requiredPortType" type="string" />
                    <element minOccurs="1" name="requiredScope" type="anyURI" />
                </sequence>
            </complexType>
        </element>
    </schema>
</wsdl:types>

<wsdl:message name="createGridRequest">
    <wsdl:part name="body" element="tns:createGrid" />
    <wsdl:part name="reqHeader" element="tns:requestHeader" />
</wsdl:message>

<wsdl:message name="createGridResponse">
    <wsdl:part name="body" element="tns:createGridResponse" />
</wsdl:message>

<wsdl:portType name="SolverDummyProxyWSPortType">
    <wsdl:operation name="createGrid">
        <wsdl:input message="tns:createGridRequest" />
        <wsdl:output message="tns:createGridResponse" />
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="SolverDummyProxyWSSoap11Binding" type="tns:SolverDummyProxyWSPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="createGrid">
        <wsdl:input>
            <soap:body parts="body" use="literal" />
            <soap:header message="tns:createGridRequest" part="reqHeader"
                use="literal" />
        </wsdl:input>
        <wsdl:output>
            <soap:body parts="body" use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

<wsdl:binding name="SolverDummyProxyWSSoap12Binding" type="tns:SolverDummyProxyWSPortType">
    <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="createGrid">
        <wsdl:input>
            <soap12:body parts="body" use="literal" />
            <soap12:header message="tns:createGridRequest" part="reqHeader"
                use="literal" />
        </wsdl:input>
        <wsdl:output>
            <soap12:body parts="body" use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

<wsdl:service name="SolverDummyProxyWS">
    <wsdl:port name="SolverDummyProxyWSSoap11Endpoint" binding="tns:SolverDummyProxyWSSoap11Binding">
        <soap:address location="http://localhost:8280/services/SolverDummyProxyWS.SolverDummyProxyWSSoap11Endpoint" />
    </wsdl:port>
    <wsdl:port name="SolverDummyProxyWSSoap12Endpoint" binding="tns:SolverDummyProxyWSSoap12Binding">
        <soap12:address location="http://localhost:8280/services/SolverDummyProxyWS.SolverDummyProxyWSSoap12Endpoint" />
    </wsdl:port>
</wsdl:service>
</wsdl:definitions>

因此,我使用WSO2-ESB Webinterface创建了一个代理。如果我看一下创建的代理的实际WSDL,我会看到WSO2 ESB做了一些更改:-添加HTTP Binding -从createGridRequest消息中删除header-part - message soap:input in Binding(有两个header定义,并且body部分被删除)

WSDL-由WSO2修改-ESB

代码语言:javascript
复制
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:tns="http://de.unistuttgart.iaas" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://de.unistuttgart.iaas">
<wsdl:types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://de.unistuttgart.iaas">
        <element name="createGrid">
            <complexType>
                <sequence>
                    <element minOccurs="0" name="milliseconds" type="long" />
                </sequence>
            </complexType>
        </element>
        <element name="createGridResponse">
            <complexType>
                <sequence>
                    <element minOccurs="0" name="return" type="string" />
                </sequence>
            </complexType>
        </element>
        <element name="requestHeader">
            <complexType>
                <sequence>
                    <element name="simulationId" type="long" />
                    <element name="activityId" type="long" />
                    <element name="requiredPolicy" type="anyType" />
                    <element name="requiredPortType" type="string" />
                    <element name="requiredScope" type="anyURI" />
                </sequence>
            </complexType>
        </element>
    </schema>
</wsdl:types>
<wsdl:message name="createGridRequest">
    <wsdl:part name="body" element="tns:createGrid" />
</wsdl:message>
<wsdl:message name="createGridResponse">
    <wsdl:part name="body" element="tns:createGridResponse" />
</wsdl:message>
<wsdl:portType name="SolverDummyProxyHWSPortType">
    <wsdl:operation name="createGrid">
        <wsdl:input message="tns:createGridRequest" wsaw:Action="http://de.unistuttgart.iaas/SolverDummyProxyWSPortType/createGridRequest" />
        <wsdl:output message="tns:createGridResponse" wsaw:Action="http://de.unistuttgart.iaas/SolverDummyProxyWSPortType/createGridResponse" />
    </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SolverDummyProxyHWSSoap11Binding" type="tns:SolverDummyProxyHWSPortType">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    <wsdl:operation name="createGrid">
        <soap:operation soapAction="" style="document" />
        <wsdl:input>
            <soap:body use="literal" />
            <soap12:header use="literal" part="reqHeader" message="tns:createGridRequest" />
            <soap12:header use="literal" part="reqHeader" message="tns:createGridRequest" />
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal" />
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>
<wsdl:binding name="SolverDummyProxyHWSSoap12Binding" type="tns:SolverDummyProxyHWSPortType">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    <wsdl:operation name="createGrid">
        <soap12:operation soapAction="" style="document" />
        <wsdl:input>
            <soap12:body use="literal" />
            <soap12:header use="literal" part="reqHeader" message="tns:createGridRequest" />
            <soap12:header use="literal" part="reqHeader" message="tns:createGridRequest" />
        </wsdl:input>
        <wsdl:output>
            <soap12:body use="literal" />
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>
<wsdl:binding name="SolverDummyProxyHWSHttpBinding" type="tns:SolverDummyProxyHWSPortType">
    <http:binding verb="POST" />
    <wsdl:operation name="createGrid">
        <http:operation location="createGrid" />
        <wsdl:input>
            <mime:content type="text/xml" part="parameters" />
        </wsdl:input>
        <wsdl:output>
            <mime:content type="text/xml" part="parameters" />
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>
<wsdl:service name="SolverDummyProxyHWS">
    <wsdl:port name="SolverDummyProxyHWSHttpSoap11Endpoint" binding="tns:SolverDummyProxyHWSSoap11Binding">
        <soap:address location="http://Tobiass-MacBook-Pro.local:8280/services/SolverDummyProxyHWS.SolverDummyProxyHWSHttpSoap11Endpoint" />
    </wsdl:port>
    <wsdl:port name="SolverDummyProxyHWSHttpsSoap11Endpoint" binding="tns:SolverDummyProxyHWSSoap11Binding">
        <soap:address location="https://Tobiass-MacBook-Pro.local:8243/services/SolverDummyProxyHWS.SolverDummyProxyHWSHttpsSoap11Endpoint" />
    </wsdl:port>
    <wsdl:port name="SolverDummyProxyHWSHttpSoap12Endpoint" binding="tns:SolverDummyProxyHWSSoap12Binding">
        <soap12:address location="http://Tobiass-MacBook-Pro.local:8280/services/SolverDummyProxyHWS.SolverDummyProxyHWSHttpSoap12Endpoint" />
    </wsdl:port>
    <wsdl:port name="SolverDummyProxyHWSHttpsSoap12Endpoint" binding="tns:SolverDummyProxyHWSSoap12Binding">
        <soap12:address location="https://Tobiass-MacBook-Pro.local:8243/services/SolverDummyProxyHWS.SolverDummyProxyHWSHttpsSoap12Endpoint" />
    </wsdl:port>
    <wsdl:port name="SolverDummyProxyHWSHttpsEndpoint" binding="tns:SolverDummyProxyHWSHttpBinding">
        <http:address location="https://Tobiass-MacBook-Pro.local:8243/services/SolverDummyProxyHWS.SolverDummyProxyHWSHttpsEndpoint" />
    </wsdl:port>
    <wsdl:port name="SolverDummyProxyHWSHttpEndpoint" binding="tns:SolverDummyProxyHWSHttpBinding">
        <http:address location="http://Tobiass-MacBook-Pro.local:8280/services/SolverDummyProxyHWS.SolverDummyProxyHWSHttpEndpoint" />
    </wsdl:port>
</wsdl:service>
</wsdl:definitions>

这段代码没有强制标头,所以我最初创建初始标头的目的被wso2-esb搞砸了。

谁能告诉我如何向代理服务添加强制标头(如果我的初始wsdl文件有错误,就会出现这种情况)?

如果我的初始wsdl文件是ok的,我如何强制wso2-esb使用这个文件,而不修改它?!?

最后一个问题,有没有其他方法可以为代理的请求创建强制标头?

感谢您的回答!

EN

回答 1

Stack Overflow用户

发布于 2012-07-28 10:47:05

真的

尝试将此参数设置为您的代理服务,以按原样显示wsdl。应该使用中介器在代理服务级别处理soap标头。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11684420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档