- PR -

javaでのwebserviceクライアント作成

1
投稿者投稿内容
ホゲホゲ
会議室デビュー日: 2004/11/12
投稿数: 8
投稿日時: 2005-01-24 12:31
お世話になります。

サーバーサイドが.netで作られているwebserviceに
javaで作成するクライアントサイドを作っているのですが、
ヘッダーエラーで「サーバーはHTTP ヘッダー SOAPAction の値を認識しませんでした」
と出てきました。スタブの生成をしないと.netのwebserviceは
使えないものでしょうか?
よろしくお願いします
java version:1.4.2
axis:1_0

koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 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
ホゲホゲ
会議室デビュー日: 2004/11/12
投稿数: 8
投稿日時: 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)
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2005-01-26 11:12
引用:

ホゲホゲさんの書き込み (2005-01-26 10:13) より:
いろいろ実験してみたのですが、


その「いろいろ実験」した内容を書いてください。「いろいろ」では伝わりません。
「いろいろ」の内容ですが、WSDL文書、スタブの生成方法、クライアント側の実装の3点について書いてあるとよいでしょう。
もちろん、.NETで実装されたサーバ側が正しく動いていると言う前提ありきですが。

引用:

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)


スタックトレースのこの部分を見る限りでは、AxisのWSDL2Javaが生成したスタブを使っていないように思えますが、どのようにしてWebサービスを呼び出しましたか?
私の記憶では、Axis 1.1が生成したスタブを使用した場合、以下のようなスタックトレースになり、スタブの実行が確認できたと思います。
引用:

(冒頭略)
at org.apache.axis.client.Call.invoke(Call.java:2301)
at org.apache.axis.client.Call.invoke(Call.java:1758)
at org.tempri.HelloServiceSoapBindingStub.sayHello(HelloServiceSoapBindingStub.java:XXX) ←スタブの実行
at Axis.Tes.sayHelloHelper(Tes.java:28)
at Axis.Tes.main(Tes.java:35)


Webサービスの名前がorg.tempri.HelloService、メソッドがsayHelloだとして書いています。

ところで、私が挙げたリンク先を読みましたか?
ホゲホゲ
会議室デビュー日: 2004/11/12
投稿数: 8
投稿日時: 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
しげる
会議室デビュー日: 2002/10/27
投稿数: 3
投稿日時: 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はこんなにも面倒なのかとびっくりしました。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-02-09 15:17
引用:

しげるさんの書き込み (2006-02-09 13:48) より:
.NETのサービスは
実に簡単に公開および利用ができるのになんでJavaはこんなにも面倒なのかとびっくりしました。



.NETはIDE(VS)を使い、Javaはコマンドラインを使用しているからではないでしょうか?
JavaでもIDEを使えば公開も利用も簡単にできますよ。
(ただしeclipseは自分で環境を整える必要あり。無料の代償でしょうか?)

.NETの吐き出すWSDLには独自のタブがあり、取り込むときに注意が必要です。

1

スキルアップ/キャリアアップ(JOB@IT)