- PR -

サーバー:ASP.NET <-->クライアント:JAVA SOAP通信

1
投稿者投稿内容
papa
会議室デビュー日: 2006/08/11
投稿数: 2
投稿日時: 2006-08-11 00:31
はじめまして。
いつも参考にさせていただいています。

現在、サーバーにASP.NET(C#)で開発し、クライアントはJAVAで開発しSOAP通信でデータのやり取りを実現しようと考えております。

サンプルを作成しておりますが、参考になるサイトが少なく手間取っております。

サーバーとクライアントの両方をSOAP通信でやり取りすることは出来たのですが、
ASP.NET(サーバー)とJAVA(クライアント)での通信が出来ません。

まずは、参考になるサイトをご教示いただければと思います。

■サーバー:
   ASP.NET(C#) VS2005
   WINDOWS 2003 Server
   IIS
■クライアント:
   JAVA1.5
   Linux RedHat

よろしくお願いいたします。

がんふぃーるど
ベテラン
会議室デビュー日: 2006/06/05
投稿数: 58
お住まい・勤務地: さいたま
投稿日時: 2006-08-11 02:41
ASP.NET側(サーバ側)がWebServiceとして公開されているのであれば、
普通のWebServiceと同じ(WSDLから各種ファイルを作成する)で良いはずですが…

この辺の日本語の文献は少ないですね…かくいう私もほとんど見つけられてません。
英語で(しかも本)で良いのなら『Java EE and .NET Interoperability』という
のがあります。J2EE⇔.NETを細かく書かれています。方法ごとに章が設けられている
ので分かり易いと思います。

#誤ってタッチパッドに手が当たり、途中で送信してしまった…

[ メッセージ編集済み 編集者: がんふぃーるど 編集日時 2006-08-11 02:49 ]

[ メッセージ編集済み 編集者: がんふぃーるど 編集日時 2006-08-11 02:52 ]
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-08-11 08:45
クライアントはapache Axisでしょうか?
「通信ができない」時のメッセージなどを具体的に書くと
何かわかるかもしれません。
http://ws.apache.org/axis/java/client-side-axis.html
papa
会議室デビュー日: 2006/08/11
投稿数: 2
投稿日時: 2006-08-11 09:30
がんふぃーるどさん、Java僧さん
返信ありがとうございました。

引用:

Java僧さんの書き込み (2006-08-11 08:45) より:
クライアントはapache Axisでしょうか?
「通信ができない」時のメッセージなどを具体的に書くと
何かわかるかもしれません。
http://ws.apache.org/axis/java/client-side-axis.html



はい。
apache Axisを使っております。

[クライアント側のソース]
try{
String endpoint = "http://192.168.1.56/soap_sample/HelloWorld.asmx";

Service service = new Service();
Call call = (Call) service.createCall();

call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName(new QName("http://tempuri.org/HelloWorld/","SayHelloWorld"));
String ret = (String) call.invoke( new Object[0] );

System.out.println(ret);
}catch(Exception ex){
ex.printStackTrace();
}
----------------------------------------------------
通信できないときのエラーメッセージは以下のとおりです。

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:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:585)
at org.apache.xerces.impl.XMLNamespaceBinder.handleEndElement(XMLNamespaceBinder.java:898)
at org.apache.xerces.impl.XMLNamespaceBinder.endElement(XMLNamespaceBinder.java:644)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1008)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1469)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:329)
at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:525)
at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:581)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1175)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at HelloWorldSOAPClient.main(HelloWorldSOAPClient.java:60)

{http://xml.apache.org/axis/}hostname:(Server-name)

----------------------------------------------------------
[サーバー側のソース]
http://ja.gotdotnet.com/quickstart/aspplus/doc/webservicesintro.aspx
を参考にしてソースを作成し
「Web参照の追加」でURLに「http://localhost/soap_sample/HelloWorld.asmx?WSDL」を
入力し「参照の追加」をしております。


よろしくお願いします。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-08-11 13:01
.Netのサーバ側実装に詳しくないので、
引用:
「Web参照の追加」でURLに「http://localhost/soap_sample/HelloWorld.asmx?WSDL」を
入力し「参照の追加」をしております。

が正しいのかどうかわかりません。
#なんとなくこれはクライアント側の手順のような気がします・・・

クライアントはAxisのWSDL2Javaでプロクシコードを生成してますか?

「ぽすたん」(http://www.postan.jp/postanws.htm)のサービスが、
.Netのサーバ実装のようなので、これを使って
自動生成されたコードからサービスを使う一番簡単な
Javaコードを貼っておきます。

コード:
SearchEngineSoap soap =new  SearchEngineLocator().getSearchEngineSoap();
FindList list = soap.fromZipCode2("1200012");
FindItem item[] = list.getItem();
System.out.println(item[0].getKanji());



(参考)
WSDL2JavaをはじめとしてAxisのユーティリティはAntのタスクも
定義されているのでこれを使うと楽できます。
コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="axisant" basedir=".">
<taskdef resource="axis-tasks.properties" />
  <target name="wsdl">
	<axis-wsdl2java url="http://webservice.est.co.jp/zipcode/SearchEngine.asmx?WSDL" output="." deployscope="application" serverSide="no" skeletonDeploy="yes" noimports="no" verbose="no" />
  </target>
</project>


1

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