2011-07-08 14 views
1

私はJava EE 6チュートリアルを進めていますが、私はWebサービスに関するセクションです。私は近い将来、同様のことをする必要があるので、helloserviceを実行しようとしています。ただし、エラーなしでビルドしてデプロイしている間に、GlassFishから404エラーが発生します。私はGlassFishのログを見て、何の問題もないことを発見しました。ここでは、サービスからのコードがあります:私が読んだものに基づいJava EE 6チュートリアル、helloserviceで404エラーが発生する

package helloservice.endpoint; 

import javax.jws.WebService; 
import javax.jws.WebMethod; 

@WebService 
public class Hello { 
    private String message = "Hello, "; 

    public void Hello() { 
    } 

    @WebMethod 
    public String sayHello(String name) { 
     return message + name + "."; 
    } 
} 

、@WebServiceは、サービス名HelloService(ベース・クラス名+「サービス」)を持つクラスを公開する必要があります。私がに行くときしかし、:

http://localhost:8080/helloservice/HelloService?wsdl

私は404エラーを取得します。以前の例をすべて取り上げたので、GlassFishが稼働しており、導入した他のアプリケーションのためにポート8080で応答していることがわかりました。管理コンソールで、helloserviceがデプロイされ実行されていることがわかります。 "asadmin list-domains"は、私のdomain1(私の唯一のドメイン)が動作していることを示しています。私はおそらく@WebServiceアノテーションのデフォルトが間違っていると思ったので、@WebService(serviceName = "Foobar")を使って明示的な値を設定しましたが、HelloServiceをFoobarに置き換えてwsdlをチェックしようとしたときに違いはありませんでした。

他の人も同じような問題を抱えているのを見たことがありますが、解決策が投稿されていません。誰が何が間違っているか、またはそれを修正する方法を説明することができますか?それは構築し、私はそれを使用しようとすると、エラーなしで展開しながら、

答えて

2

Glassfish Webプロファイルではなく、Glassfish完全プロファイルを使用していることを確認してください。戦争が展開されたら、Glassfish管理コンソールを起動し、「アプリケーション」をクリックします。 Webサービスは、あなたのGlassfishの実装があなたのSOAPサービスを見ていない、存在しない場合

[EJB、JPA、ウェブ、Webサービス、溶接]

:あなたの "エンジン" の列は次のようになります。

+0

これが問題でした。 Webプロファイルをインストールしました。私は、WebプロファイルがWebサービスをサポートすると仮定したのは、私の悪いことだと思います。明らかに比較表でこれは当てはまりません。どうもありがとうございました! –

0

はしかし、私はGlassFishのから404エラーが発生します。私はGlassFishのログを見て、何の問題もないことを発見しました。

これは、通常、サーバー上に配備された成果物に問題がないことを示します。結局のところ、404エラーは、クライアントが無効なHTTPリクエストを発行したことを示します。簡単な言葉では、発行されたGET要求は間違っており、別のものを送信する必要があります。

私が読んだものに基づき、@WebServiceは、サービス名HelloService(ベース・クラス名+「サービス」)

を持つクラスを公開する必要がありますはい、それはデフォルトです。しかし、もっと重要なのは、アプリケーションのコンテキストルートを正しく指定したかどうかです。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <context-root>/helloservice</context-root> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class' java code.</description> 
    </property> 
    </jsp-config> 
</glassfish-web-app> 

お知らせURLでサービス名の前に表示されます<context-root>/helloservice</context-root>要素の使用:以下は、チュートリアルからglassfish-web.xmlの内容です。要求に間違ったコンテキストルートを使用している可能性があります。その結果、404エラーが発生します。

あなたが

INFOの下にリストされているように、Webサービスの展開にGlassfishのログに同じのヒントを見つけるだろうに要求を送信することを意図した場所を確認する必要がある場合:WS00018:AMX:成功裏に設定メトロ監視ルート名:PP = /月/サーバー・月[サーバー]、タイプ= WSEndpoint、名前=/Webサービスエンドポイントは、こんにちはhttp://localhost:8080/helloservice/HelloService

INFOたアドレスでリスニング

を展開しましたhelloservice-HelloService-HelloPort

INFO:WEB0671:ロードアプリケーション[helloservice] [/ helloservice]で

INFO:helloserviceが正常に1616ミリ秒で展開されました。

+0

さらに金曜日に遊んだ後、同じプロジェクトをリモートのSolarisボックスの別のGlassfishサーバーにデプロイするとうまくいきました。ローカルホスト上のGlassfishインストールにそれをデプロイすると、実行されません。私は同じGlassfishビルドを使用して両方のアプリケーションサーバーをインストールしました。私は自分のローカルWindowsインストールでいくつか問題があるはずだと思っていますが、これまでのところ何の手がかりがありません。月曜日に両サーバのINFO行を探して、出発点を見つけることができるかどうかを見ていきます。 –

1

管理コンソールからweb.xmlを読み込むと、これを見ることができます。

<servlet-mapping> 
    <servlet-name>HelloService</servlet-name> 
    <url-pattern>/hello</url-pattern> 
</servlet-mapping> 

私は(チュートリアルでは1)http://localhost:8080/helloservice/hello?wsdlの代わりhttp://localhost:8080/helloservice/HelloService?wsdlを試してみましたが、それがうまく働きました。推測のチュートリアルが正しく更新されませんでした。

関連する問題