1

異なるサービス用に 2 つの WSDL ファイルがあります。両方のサービスは独立してうまく機能しますが、両方のサービスを同じ Eclipse プロジェクトに含めると、次のエラーのインスタンスがいくつか発生します。

There's no ObjectFactory with an @XmlElementDecl for the element {http://schemas.foobar.com/oms/2010/10/Models}City.
    this problem is related to the following location:
        at protected javax.xml.bind.JAXBElement com.foobar.schemas.oms._2010._10.models.BusinessUnitData.city
        at com.foobar.schemas.oms._2010._10.models.BusinessUnitData
        at protected com.foobar.schemas.oms._2010._10.models.BusinessUnitData com.foobar.schemas.oms._2010._10.businessunit.CreateBusinessUnitRequest.businessUnitData
        at com.foobar.schemas.oms._2010._10.businessunit.CreateBusinessUnitRequest
        at @javax.xml.bind.annotation.XmlSeeAlso(value=[class com.foobar.schemas.oms._2010._10.businessunit.CreateBusinessUnitRequest])
        at public com.foobar.schemas.oms._2010._10.businessunit.CCreateBusinessUnitRequest com.foobar.schemas.oms._2010._10.businessunit.ObjectFactory.createCCreateBusinessUnitRequest()
        at com.foobar.schemas.oms._2010._10.businessunit.ObjectFactory
        at protected javax.xml.bind.JAXBElement com.foobar.schemas.oms._2010._10.businessunit.AddToStructureRequest.unitStructureData
        at com.foobar.schemas.oms._2010._10.businessunit.AddToStructureRequest
        at @javax.xml.bind.annotation.XmlSeeAlso(value=[class com.foobar.schemas.oms._2010._10.businessunit.AddToStructureRequest])
There's no ObjectFactory with an @XmlElementDecl for the element {http://schemas.foobar.com/oms/2010/10/Models}ClientKey.
    this problem is related to the following location:
        at protected javax.xml.bind.JAXBElement com.foobar.schemas.oms._2010._10.models.BusinessUnitData.clientKey
        at com.foobar.schemas.oms._2010._10.models.BusinessUnitData
        at protected com.foobar.schemas.oms._2010._10.models.BusinessUnitData com.foobar.schemas.oms._2010._10.businessunit.CreateBusinessUnitRequest.businessUnitData
        at com.foobar.schemas.oms._2010._10.businessunit.CreateBusinessUnitRequest
        at @javax.xml.bind.annotation.XmlSeeAlso(value=[class com.foobar.schemas.oms._2010._10.businessunit.CreateBusinessUnitRequest])
        at public com.foobar.schemas.oms._2010._10.businessunit.CCreateBusinessUnitRequest com.foobar.schemas.oms._2010._10.businessunit.ObjectFactory.createCCreateBusinessUnitRequest()
        at com.foobar.schemas.oms._2010._10.businessunit.ObjectFactory
        at protected javax.xml.bind.JAXBElement com.foobar.schemas.oms._2010._10.businessunit.AddToStructureRequest.unitStructureData
        at com.foobar.schemas.oms._2010._10.businessunit.AddToStructureRequest
        at @javax.xml.bind.annotation.XmlSeeAlso(value=[class com.foobar.schemas.oms._2010._10.businessunit.AddToStructureRequest])

これらのエラーは端末ウィンドウを完全に埋め尽くすので、これが何回発生するかわかりません。

2 つの方法のいずれかでスタブ コードを生成しています。最初に、wsdl2java で両方を生成してから、コンパイルされたコードを jar にパックし、それをビルド パスに含めてみました。また、cxf code-gen プラグインを使用して新しい Maven プロジェクトを作成してみました。次に、「mvn install」を実行し、生成されたコードを maven の依存関係として含めました。どちらの手法でも同じ結果が得られます。各サービスは、それ自体で正常に動作します。しかし、両方がプロジェクトに含まれていると、オブジェクト ファクトリ エラーが発生します。

この種のエラーの原因は何ですか? jaxbバインディングファイルで修正できますか? もしそうなら、私は Web サービスに不慣れで、書式設定方法を学ぶためのバインディング ファイルの例を見つけるのに苦労しています。

4

2 に答える 2

1

この Maven プラグインを使用して、WSDL からクラスを生成します。

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>2.7.1</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-bindings-soap</artifactId>
            <version>2.7.1</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>generate-jaxb</id>
            <phase>generate-sources</phase>
            <configuration>
                <additionalJvmArgs>-Dfile.encoding=UTF8</additionalJvmArgs>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>src/main/webapp/WEB-INF/wsdl/YourWSDL1.wsdl</wsdl>
                        <extraargs>
                            <extraarg>-wsdlLocation</extraarg>
                            <extraarg></extraarg>
                            <extraarg>-client</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>your.app.pkg1</extraarg>
                        </extraargs>
                    </wsdlOption>
                    <wsdlOption>
                        <wsdl>src/main/webapp/WEB-INF/wsdl/YourWSDL2.wsdl</wsdl>
                        <extraargs>
                            <extraarg>-wsdlLocation</extraarg>
                            <extraarg></extraarg>
                            <extraarg>-client</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>your.app.pkg2</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

そして、持っている WSDL ファイルごとに異なるパッケージを指定します。さまざまな WSDL ファイルに基づくすべてのクラスがさまざまなパッケージで生成されるため、競合は発生しません。

于 2013-01-09T13:34:12.383 に答える
0

Java アプリケーションでの複数の Web サービスの実装を説明する次のチュートリアルを試してください。

http://java.dzone.com/articles/tip-multiple-web-service

http://www2.sys-con.com/itsg/virtualcd/webservices/archives/0308/zade/index.html

于 2013-01-08T16:12:48.807 に答える