2011-08-15 11 views
7

CXF Webサービスエンドポイント構成で相対発行アドレスを使用しようとすると、多くの問題が発生しています。CXF jaxwsエンドポイント相対発行アドレス

私は、次の設定ファイルを持つ単純なJava-最初のJAX-WSのプロジェクトがあります。

applicationContent-cxf.xml:

<beans xmlns=...> 
    ... 
    <jaxws:endpoint 
     id="helloWorldService" 
     implementorClass="org.helloworld.ws.HelloWorldServiceImpl" 
     implementor="#helloWorldServiceImpl" <!-- spring managed --> 
     endpointName="sayHello" 
     address="HelloWorldService"/> 
</beans> 

のweb.xml:

<web-app> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      WEB-INF/applicationContext.xml 
      WEB-INF/applicationContext-cxf.xml 
     </param-value> 
    </context-param> 

    <listener> 
     <listener-class> 
      org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>HelloWorldServlet</servlet-name> 
     <display-name>Hello World Servlet</display-name> 
     <servlet-class> 
      org.apache.cxf.transport.servlet.CXFServlet 
     </servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>HelloWorldServlet</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

よるとhttp://cxf.apache.org/docs/servlet-transport.htmlには、私はHelloWorldServiceの公開アドレスを指定することができ、サービスのURLは(例えば)http://localhost:8080/services/HelloWorldServiceに解決されるはずです。しかし、私がhttp://localhost:8080/services/HelloWorldService?wsdlに行こうとすると、404が出ます。jaxwsエンドポイントの公開アドレスを絶対URL http://localhost:8080/services/HelloWorldServiceに変更すると、wsdlにアクセスできます。

可能であれば、相対エンドポイントアドレスを指定します。私はCXF(そしてウェブサービスの作成)を初めて使うので、どんな助けでも大歓迎です!

UPDATE 1:

私はそれを記録しているのか分からないのTomcat 7に自分のWebサービスを展開していますが、私のスタートアップログ状態Setting the server's publish address to be HelloWorldServiceの行の一つ。誰かが私を助けるためにもっと情報が必要なら私に知らせてください。

UPDATE 2:

CXFはCXFServletが「使用中」であるかどうかを検出し、それがない場合に埋め込まれた桟橋のインスタンスを使用していることが表示されます。 http://cxf.apache.org/docs/xfire-migration-guide.html#XFireMigrationGuide-HTTPandServletSetup。だから、何らかの理由でCXFが私のサーブレットの代わりに埋め込まれたjettyインスタンスを使用しています。しかし、私はweb.xmlにHelloWorldServlet以外に必要な設定が何であるか分かりません.CXFのドキュメントはそれ以上の助けにはなりません。

答えて

12

答えは、もちろん簡単です(頭が尖ったシンプルです)。私のcxf bean定義では、ここに見たように "cxf-servlet.xml"ファイルをインポートしていませんでしたhttp://cxf.apache.org/docs/servlet-transport.html。このファイルをインポートしないと、cxfはCXFサーブレットの代わりに埋め込みjettyインスタンスを使用する必要があるとみなします。私の推測では、桟橋インスタンスは絶対公開アドレスを指定するエンドポイントでのみ動作します。

+0

+1あなたの机の上に頭を叩いてください –

+1

私はまったく同じ問題を抱えていました。 – user1339772

0

はそれが

address="/HelloWorldService" 

ではないでしょうか?

+0

これを指摘してくれてありがとう。私は/ HelloWorldServiceを試しましたが、それはまだ動作していないようです。 – Jpnh

+0

エンドポイントにserviceName = "service'sName"を追加し、 – tamilnad

+0

ありがとうございます。 Webサービスの実装でJaxWSアノテーションで設定されたサービス名があるとは言いませんでした。 – Jpnh

関連する問題