2013-07-01 10 views
10

javaのTomcatアプリケーションサーバー用の簡単なJAX-WS Webサービスを作成しました。jax-ws Webサービスを作成し、XSDなしでWSDLを生成

私は1つのインタフェースと実装クラスにあります。
インタフェース

@WebService(name = "myWs") 
@SOAPBinding(style = Style.RPC) 
public interface IMyWs { 
    @WebMethod(operationName = "getUser") 
    Response getUser(@WebParam(name = "phone", mode = Mode.IN) String phone); 

} 


実装

@WebService(endpointInterface = "ge.mari.IMyWs") 
public class MyWs implements IMyWs { 
    @Override 
    public Response getUser(String phone) { 
       // SOME CODE 
     return response; 
    } 
} 

私の問題は私のwsdlファイルレスポンスクラスで、ということですxで定義されるsdファイル。
これは

<types> 
<xsd:schema> 
      <xsd:import namespace="http://ws.mari.ge/" schemaLocation="http://localhost:8080/MyServcie/MyWs?xsd=1"> 
</xsd:import> 
</xsd:schema> 
</types> 

がどのように私は、Webサービスは、WSDLファイルの代わりに、別のXSDファイル内のすべての種類を生成することができます私のWSDLファイルからの抜粋ですか?
設定を変更するか、Webサービスに注釈を追加する必要がありますか?

答えて

0

AFAIK JAXがスキーマインラインでWSDLを生成することはできません。

BTW:WSDL定義とXSDスキーマを分離するのは良い方法です(スキーマによって定義されたオブジェクト構造を別のコンテキストで使用して、データをファイルに保存するなど)。

言った:あなたは常にjax-wsが最初にWSDLを生成して、あなたの心のコンテンツにそれを編集することができますもし必要 WSDL「オールインワン」(いくつかの古代のクライアントがそれを必要とするため)。編集されたWSDLは、@WebServiceアノテーションのwsdlLocationパラメータを使用して含めることができます。

+0

http://jax-ws-commons.java.net/jaxws-maven-plugin/wsgen-mojo.htmlそれが実際にスキーマをインライン化するJAX-WSを指示することができます。それを達成する方法については、上記の私の答えを参照してください。 – Kallja

+0

@ Kallja:私はOPがアプリケーションサーバによって生成されたWSDLを参照していると仮定しました(なぜなら、 'schemaLocation =" http:// localhost:8080/MyServcie/MyWs?xsd = 1 "がWSDLフラグメントにあります)。私はアプリケーションサーバーにオールインワンWSDLを生成させる方法を知らないのですが... **しかし、あなたのポイントは良いものです。使用した 'wsgen'パラメータを覚えておく必要があります。 - ) – secra

9

あなたは、JAX-WSは

-inlineSchemas 

コマンドラインスイッチを使用して、WSDLファイルに生成されたスキーマを挿入することができます。 [1]

あなたは次のようにあなたが実行コンフィギュレーションにinlineSchemasの構成要素と同じことを行うにはJAX-WSのMavenプラグインを設定することができ、あなたのプロジェクトでMavenを使用している場合:[2]

<plugin> 
    <groupId>org.jvnet.jax-ws-commons</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
    <execution> 
     <id>SomeId</id> 
     <goals> 
     <goal>wsgen</goal> 
     </goals> 
     <phase>prepare-package</phase> 
     <configuration> 
     <sei>some.class.Name</sei> 
     <genWsdl>true</genWsdl> 
     <keep>true</keep> 
     <resourceDestDir>some/target/dir</resourceDestDir> 
     <inlineSchemas>true</inlineSchemas> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Javaクラスを変更する必要はありません。

[1] http://jax-ws.java.net/nonav/2.2.1/docs/wsgen.html

[2]

+0

ありがとうございます。あなたの命の恩人。 –

関連する問題