日期:2014-05-20  浏览次数:20743 次

怎么用java 实现两个web service之间调用各自的接口 实现数据的传输(倾家荡产给分求答案)
项目要求创建一个web service(使用java语言,axis来实现) 和远程的一个web service实现数据传输
对方用什么语言未知,也不重要。
已经写好了web service的4个接口提供给对方调用,后台业务逻辑也完成,能发布到tomcat上。
在地址栏输入http://loaclhost/axis/****.jws?wsdl 能正常显示 XML格式的网页。
现在的问题是测试的时候 不明白另一个web service该用什么方式给我的接口传递参数数据,让我完成逻辑处理后返回数据。
也就是想知道两个web service之间怎么调用对方的接口 传递参数。
希望有朋友能帮忙!! 万分感谢。。。

------解决方案--------------------
你的WebService只要发布出去,并且对应的业务逻辑编写完成了,调用是对方的事情。
比如你现在要自己写一个程序来测试你的接口是不是能够正常工作,可以先把发布好的WSDL保存到一个文件中,命名为WSDL,然后使用axis自带的WSDL2JAVA把他转换成对应的java类,一般情况下,这些类中有一个以porttype结尾,这个类可以看做你要调用的对象类,把这些生成的代码放到你的工程里边(或者打包依赖)。
比如:
我把一个public String getName(String id)的方法,发布成了WebService,将生成的WSDL通过
java -cp axis.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.8.jar;saaj.jar;wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java GetUserNameService.wsdl

生成的类如下
GetUserNameService.java
GetUserNameServiceHttpBindingStub.java
GetUserNameServiceLocator.java
GetUserNameServicePortType.java

在你的代码中这样调用服务
GetUserNameService locator = new GetUserNameServiceLocator(new URL("WSDL的地址"));
GetUserNameServicePortType service = locator.getGetUserNameServiceHttpPort();
service.getName("1");//业务方法

------解决方案--------------------
首先,webservice是被动的被别人调用,本身无行为能力,如果要达到楼主的效果,必须有个触发的行为。

比如,A和B都各自部署完毕,你所需要的是,启动一个行为C,C调用webserviceA, A被调用的行为内再调用B,
反之要B调用A也是如此。他们本身不会触发,必须有个另外的行为。
------解决方案--------------------
lz可能是想问我们在进行基于web服务的开发时,当调用web服务方法一般传递什么类型的参数,以及web服务的业务逻辑完成后又以什么样的类型返回,即web服务方法的返回值类型。可是目前大家一般在举例时都只是用简单java自带的类型作为参数和返回值,比如String。不过,可以肯定的是,axis能够处理复杂的自定义数据类型。
下面这篇文章讲的很好,与lz共同学习一下。
------解决方案--------------------
11、 VB客户端代码,由于使用了自定义的数据类型,所以只能使用microsoft soap开发包的低端API,这里使用SOAP Toolkit 2.0,代码如下:
Option Explicit
 
Private Sub Command1_Click()
On Error GoTo ErrorHandler

Dim Serializer As SoapSerializer
Dim Reader As SoapReader
Dim Connector As SoapConnector
Dim Method As String

Dim Dom As MSXML2.DOMDocument30
Dim Elm As IXMLDOMElement

Method = Trim(Text2.Text)
If Method = "" Then
MsgBox "请输入方法名!"
Exit Sub
End If
Set Connector = New HttpConnector
Connector.Property("EndPointURL") = Text1.Text
'Connector.Property("SoapAction") = BASE_SOAP_ACTION_URI & Method
Connector.BeginMessage

Set Serializer = New SoapSerializer
Serializer.Init Connector.InputStream

Serializer.startEnvelope
Serializer.startBody
Serializer.startElement Method, "", "", ""
 
'方法的参数
Serializer.startElement "address"
Serializer.writeString "dalian"
Serializer.endElement
Serializer.startElement "aouthor"
Serializer.writeString "neusoft"
Serializer.endElement

Serializer.endElement
Serializer.endBody
Serializer.endEnvelope

Connector.EndMessage

Set Reader = New SoapReader
Reader.Load Connector.OutputStream

If Not Reader.Fault Is Nothing Then
MsgBox Reader.faultstring.Text, vbExclamation
Else
Text3.Text = Reader.Dom.xml
End If
 
Exit Sub

ErrorHandler:
 
MsgBox "ERROR: " & Err.Description, vbExclamation
Err.Clear
Exit Sub
 
End Sub
 
Private Sub Form_Load()
Text1.Text = "http://localhost:8080/tour/services/DataServices?wsdl"