- - PR -
javaでのwebserviceクライアント作成
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-24 12:31
お世話になります。
サーバーサイドが.netで作られているwebserviceに javaで作成するクライアントサイドを作っているのですが、 ヘッダーエラーで「サーバーはHTTP ヘッダー SOAPAction の値を認識しませんでした」 と出てきました。スタブの生成をしないと.netのwebserviceは 使えないものでしょうか? よろしくお願いします java version:1.4.2 axis:1_0 | ||||||||||||
|
投稿日時: 2005-01-24 14:39
Axisを使う場合、WSDL2Javaを使うと、WSDL文書からスタブを含むクライアント側コードを生成できます。
以下のページを参考にすると良いでしょう。 http://www.wakhok.ac.jp/~sakamoto/WS/web_service.html http://www.wakhok.ac.jp/~sakamoto/WS/web_service_c4.html http://ws.apache.org/axis/java/user-guide.html#WSDL | ||||||||||||
|
投稿日時: 2005-01-26 10:13
koeさん
お世話になります。 いろいろ実験してみたのですが、 org.apache.axis.client.Call@210b5を呼び出し後 エラーが発生します。 いちおう、接続しにいっているようですがWebService(.net) 側がクライアントサイドのメッセージを解読できていないようですが、 原因はなんでしょうか?エラーログ等を見てもわかりません。 エラーコード AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client faultSubcode: faultString: サーバーは HTTP ヘッダー SOAPAction の値を認識しませんでした : ''。 faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:サーバーは HTTP ヘッダー SOAPAction の値を認識しませんでした : ''。 at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:221) at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:128) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1083) at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source) at org.apache.crimson.parser.Parser2.content(Unknown Source) at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source) at org.apache.crimson.parser.Parser2.content(Unknown Source) at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source) at org.apache.crimson.parser.Parser2.parseInternal(Unknown Source) at org.apache.crimson.parser.Parser2.parse(Unknown Source) at org.apache.crimson.parser.XMLReaderImpl.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:226) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:645) at org.apache.axis.Message.getSOAPEnvelope(Message.java:424) at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:173) at org.apache.axis.client.Call.invokeEngine(Call.java:2719) at org.apache.axis.client.Call.invoke(Call.java:2702) at org.apache.axis.client.Call.invoke(Call.java:2378) at org.apache.axis.client.Call.invoke(Call.java:2301) at org.apache.axis.client.Call.invoke(Call.java:1758) at Axis.Tes.sayHelloHelper(Tes.java:28) at Axis.Tes.main(Tes.java:35) {http://xml.apache.org/axis/}hostname:hon-sys019 サーバーは HTTP ヘッダー SOAPAction の値を認識しませんでした : ''。 at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:221) at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:128) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1083) at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source) at org.apache.crimson.parser.Parser2.content(Unknown Source) at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source) at org.apache.crimson.parser.Parser2.content(Unknown Source) at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source) at org.apache.crimson.parser.Parser2.parseInternal(Unknown Source) at org.apache.crimson.parser.Parser2.parse(Unknown Source) at org.apache.crimson.parser.XMLReaderImpl.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:226) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:645) at org.apache.axis.Message.getSOAPEnvelope(Message.java:424) at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:173) at org.apache.axis.client.Call.invokeEngine(Call.java:2719) at org.apache.axis.client.Call.invoke(Call.java:2702) at org.apache.axis.client.Call.invoke(Call.java:2378) at org.apache.axis.client.Call.invoke(Call.java:2301) at org.apache.axis.client.Call.invoke(Call.java:1758) at Axis.Tes.sayHelloHelper(Tes.java:28) at Axis.Tes.main(Tes.java:35) | ||||||||||||
|
投稿日時: 2005-01-26 11:12
その「いろいろ実験」した内容を書いてください。「いろいろ」では伝わりません。 「いろいろ」の内容ですが、WSDL文書、スタブの生成方法、クライアント側の実装の3点について書いてあるとよいでしょう。 もちろん、.NETで実装されたサーバ側が正しく動いていると言う前提ありきですが。
スタックトレースのこの部分を見る限りでは、AxisのWSDL2Javaが生成したスタブを使っていないように思えますが、どのようにしてWebサービスを呼び出しましたか? 私の記憶では、Axis 1.1が生成したスタブを使用した場合、以下のようなスタックトレースになり、スタブの実行が確認できたと思います。
Webサービスの名前がorg.tempri.HelloService、メソッドがsayHelloだとして書いています。 ところで、私が挙げたリンク先を読みましたか? | ||||||||||||
|
投稿日時: 2005-01-26 17:48
koeさん
バッチファイルでクラスパスを通した後 コマンドラインから C:\Program Files\axis-1_2RC2\Donet>java org.apache.axis.wsdl.WSLD2Java -p stub2 -d Session http://localhost/WebService6/Service1.asmx?wsdl を入力しスタブを生成しようとしたら、エラーが発生しました。 クラスパスも何度か設定しなおしたり、指定先のUrlにブラウザーで接続 しても正常に表示されることから原因がわかりません。 また、eclipseでスタブを作成することは可能でしょうか? Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axiswsdl/W SLD2Java | ||||||||||||
|
投稿日時: 2006-02-09 13:48
ホゲホゲさん
WSLD2Javaのコマンドが違ってますよ-> WSDL2Java 私のところではスタブはできました。 私もたった今同じ現象で悩んでおります。 環境は VS.NET 2003で作成したC# Webサービスを公開(HelloWorldメソッドのみ) 別マシンのTomcat 5.5, Axis 1.3からクライアントコールテストをしております。 Local Tomcat/webapps/axis/場所の.jwsファイルのサービスは問題なく起動できますが .NETのサービスはことごとくエラーになります。エラーの内容もほぼホゲホゲさんと 同じです。.NETのサービスはことごとく完璧に動作しております。.NETのサービスは 実に簡単に公開および利用ができるのになんでJavaはこんなにも面倒なのかとびっくりしました。 | ||||||||||||
|
投稿日時: 2006-02-09 15:17
.NETはIDE(VS)を使い、Javaはコマンドラインを使用しているからではないでしょうか? JavaでもIDEを使えば公開も利用も簡単にできますよ。 (ただしeclipseは自分で環境を整える必要あり。無料の代償でしょうか?) .NETの吐き出すWSDLには独自のタブがあり、取り込むときに注意が必要です。 |
1