0

EmbeddedJettyアプリケーションにJAX-WSWebサービスを追加しようとしています。Webサービスクライアントは.NETアプリケーションになります。

私のプロジェクトは、Netbeans7.1.1でMavenアプリケーションとして作成されました。Spring3.0を使用しています。

JAX-WSをアプリケーションに追加するには、次の手順を実行しました。

  1. pom.xmlにjaxws-springを追加しました。

    <dependency>
        <groupId>org.jvnet.jax-ws-commons.spring</groupId>
        <artifactId>jaxws-spring</artifactId>
        <version>1.8</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  2. 私のSpringWebサービスのコンテキストで、WSSpringServletを構成します。

    webservicesContext.addServlet(new ServletHolder(new WSSpringServlet()), "/service/*");
    
  3. 私のサービスの実装クラスを作成しました。

    @WebService(name = "GenerateUEIDService")
    public class GenerateUEIDService {
    
        @WebMethod(operationName = "generateUniqueIds")
        public String generateUniqueIds() {
            return "Hello World";
        }
    
    }
    
  4. SpringapplicationContext.xmlファイルでサービスを構成します。

    <bean id="generateUEIDService" class="com.mycompany.GenerateUEIDService"/>
    
    <wss:binding url="/service/GenerateUEID.svc">
     <wss:service>
      <ws:service bean="#generateUEIDService" />
     </wss:service>
    </wss:binding>  
    

上記の手順3では、NetbeansでWebサービス作成ウィザードを使用しませんでした。代わりに、GenerateUEIDServiceを通常のJavaクラスとして作成しましたが、アノテーションを追加しました。Netbeansは、プロジェクトビューに「GenerateUEIDServiceService」が下にある「Webサービス」ノードを作成したため、これがWebサービスであることをどういうわけか検出しませんでした。GenerateUEIDServiceServiceを展開すると、「generateUniqueIds:String」が表示されます。

うまく構築されているようです。しかし、アプリケーションを実行すると、次のようになります。

com.sun.xml.ws.model.RuntimeModelerException:ランタイムモデラーエラー:ラッパークラスcom.mycompany.jaxws.GenerateUniqueIdsが見つかりません。それらを生成するためにAPTを実行しましたか?

いいえ、何も生成するためにAPTを実行していません。私の構成を考えると、どのようにそれを行う必要がありますか?pom.xmlにプラグインを追加する必要がありますか?それとも、Netbeansが魔法のようにラッパーを生成することになっていたのでしょうか。

私のWebサービスクライアントは.NETになることに注意してください。したがって、ドキュメント/リテラル​​ラップのデフォルトのSOAPBindingを使用する必要があると思います。

4

2 に答える 2

1

サービスのラッパークラスが自動的に生成されるかどうかを確認するために、単純なNetbeansMavenJavaアプリケーションを作成することにしました。それらは、実行時にJAX-WSランタイムによって動的に作成されることがわかりました。

[exec:exec]
Jul 12, 2012 8:30:05 AM com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass
INFO: Dynamically creating request wrapper Class com.mycompany.mavenjaxwsjetty.jaxws.Greet
Jul 12, 2012 8:30:05 AM com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
INFO: Dynamically creating response wrapper bean Class com.mycompany.mavenjaxwsjetty.jaxws.GreetResponse

それで、私の元のアプリケーションに戻ります(上記の元の投稿から)。関係のない理由でjaxws-springのものを削除しました。思い出せない変更を加えた可能性があります。そして今、そのアプリケーションを実行すると、ラッパークラスが作成されていることがログで確認できます。

したがって、私の質問に対する答えは、Netbeansが魔法のようにラッパークラスを作成するのではなく、jax-wsランタイムが作成するということだと思います。

それでも、どのような状況でラッパークラスが自動的に生成されないのだろうかと思います。または、wsgenまたはmaven-jaxb2-pluginを使用して独自のプラグインを生成したい場合。いつものように、「猫の皮を剥ぐ」には複数の方法があり、それぞれに長所と短所があります。

于 2012-07-12T12:46:36.400 に答える
0

Mavenプラグインを使用してjaxbクラスを生成できます。次のようになります。

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.8.1</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <!--
        <generatePackage>if you wan to force the package</generatePackage>
        -->
        <generateDirectory>target/jaxb/generate/</generateDirectory>
        <schemaDirectory>src/main/webapp/WEB-INF/</schemaDirectory>
        <includeSchemas>
            <includeSchema>yourXSDfile.xsd</includeSchema>
        </includeSchemas>
    </configuration>
</plugin>
于 2012-07-11T05:18:09.073 に答える