如何尊重现有的WSDL,但重命名targetNamespace或包含服务的包?

时间:2014-03-05 23:21:26

标签: java web-services soap wsdl

在我的项目中,我需要从现有的WSDL创建服务。使用Eclipse插件(Buttom - > Top)很容易。

所以我的问题是:

  1. 我有两个文件WSDL(howtosmile.wsdl和howtolaugh.wsdl)我应该尊重(每个WSDL已经存在客户端 - 我未来的Web服务)
  2. 这两个文件具有相同的目标targetNamespace:targetNamespace =“http://foo.com”
  3. howtosmile.wsdl有以下操作:

    • foo1
    • foo2的

    howtolaugh.wsdl有这些操作:

    • foo1
    • foo3

    具有相同的targetNamespace意味着它们将指向同一个包。如果我们幸运的话,我们不会在两个WSDL之间进行共同操作。但这里 foo1 是共同的,秒生成的服务将删除之前的。

    我尝试重命名webservice的targetNamespace。但现在客户抱怨他期待另一个targetNamespace(旧的)。

    我的目的是能够在同一个项目的单独包中分离每个WSDL的操作。

    这是targetNamespace的出现位置,所以也许我可以改变一些而不是全部:

    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions name="LocalhellowworldService"
        targetNamespace="http://my.company/" 
        xmlns:tns="http://my.company/">
        <wsdl:types>
            <xsd:schema targetNamespace="http://my.company/Imports">
                <xsd:import schemaLocation="hellowworld_schema0.xsd"
            </xsd:schema>
        </wsdl:types>
        <wsdl:message name="Ihellowworld_Foo1_InputMessage">
            <wsdl:part name="parameters" element="tns:Foo1" />
        </wsdl:message>
        <wsdl:message name="Ihellowworld_Foo1_OutputMessage">
            <wsdl:part name="parameters" element="tns:Foo1Response" />
        </wsdl:message>
        <wsdl:message name="Ihellowworld_Foo2_InputMessage">
            <wsdl:part name="parameters" element="tns:Foo2" />
        </wsdl:message>
        <wsdl:message name="Ihellowworld_Foo2_OutputMessage">
            <wsdl:part name="parameters" element="tns:Foo2Response" />
        </wsdl:message>
        <wsdl:portType name="Ihellowworld">
            <wsdl:operation name="Foo1">
                <wsdl:input
                    wsaw:Action="http://my.company/Ihellowworld/Foo1"
                    message="tns:Ihellowworld_Foo1_InputMessage" />
                <wsdl:output
                    wsaw:Action="http://my.company/Ihellowworld/Foo1Response"
                    message="tns:Ihellowworld_Foo1_OutputMessage" />
            </wsdl:operation>
            <wsdl:operation name="Foo2">
                <wsdl:input
                    wsaw:Action="http://my.company/Ihellowworld/Foo2"
                    message="tns:Ihellowworld_Foo2_InputMessage" />
                <wsdl:output
                    wsaw:Action="http://my.company/Ihellowworld/Foo2Response"
                    message="tns:Ihellowworld_Foo2_OutputMessage" />
            </wsdl:operation>
        </wsdl:portType>
        <wsdl:binding name="BasicHttpBinding_Ihellowworld"
            type="tns:Ihellowworld">
            <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
            <wsdl:operation name="Foo1">
                <soap:operation
                    soapAction="http://my.company/Ihellowworld/Foo1"
                    style="document" />
                <wsdl:input>
                    <soap:body use="literal" />
                </wsdl:input>
                <wsdl:output>
                    <soap:body use="literal" />
                </wsdl:output>
            </wsdl:operation>
            <wsdl:operation name="Foo2">
                <soap:operation
                    soapAction="http://my.company/Ihellowworld/Foo2"
                    style="document" />
                <wsdl:input>
                    <soap:body use="literal" />
                </wsdl:input>
                <wsdl:output>
                    <soap:body use="literal" />
                </wsdl:output>
            </wsdl:operation>
        </wsdl:binding>
        <wsdl:service name="LocalhellowworldService">
            <wsdl:port name="hellowworldPort" binding="tns:BasicHttpBinding_Ihellowworld">
                <soap:address
                    location="http://localhost:8080/server/services/hellowworldPort" />
            </wsdl:port>
        </wsdl:service>
    </wsdl:definitions>
    

1 个答案:

答案 0 :(得分:0)

我使用spring工具套件和Rational Application Developer。两者都是eclipse的实现。

在Spring工具套件中,我们可以选择“为命名空间定义自定义映射” 启用该复选框。在下一个屏幕上,您将获得将命名空间映射到自定义包的选项。

enter image description here

在RAD, 我们可以选择浏览目标包。

enter image description here

Eclise将有类似的选项来为生成的类选择包。