目的
- Java客户端访问WebService
- 2个项目在同一个Tomcat的webapp的目录下,实现项目A能够通过webService访问项目B
在Java工程中访问
package com.hry.axis;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class RPCClient {
public static void demo(){
// 使用RPC方式调用WebService
RPCServiceClient serviceClient = null;
try {
serviceClient = new RPCServiceClient();
} catch (AxisFault e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Options options = serviceClient.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(
"http://127.0.0.1:8999/VTMS3000/services/VTMS?wsdl");
options.setTo(targetEPR);
// 指定getGreeting方法的参数值
Object[] opAddEntryArgs = new Object[] { "超人" };
// 指定getGreeting方法返回值的数据类型的Class对象
Class[] classes = new Class[] { String.class };
// 指定要调用的getGreeting方法及WSDL文件的命名空间
QName opAddEntry = new QName("http://service.dahuatech.com",
"HelloWorld");
// 调用getGreeting方法并输出该方法的返回值
try {
long i = System.currentTimeMillis();
int num = 100;
while(num -- > 0 ){
System.out.println(" num = " + num + " " +serviceClient.invokeBlocking(opAddEntry,
opAddEntryArgs, classes)[0]);
}
System.out.println("cost = " + String.valueOf(System.currentTimeMillis() - i));
// 必须释放资源否则出错
serviceClient.cleanupTransport();
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// // 下面是调用getPrice方法的代码,这些代码与调用getGreeting方法的代码类似
// classes = new Class[] { int.class };
// opAddEntry = new QName("http://ws.apache.org/axis2", "getPrice");
// System.out.println(serviceClient.invokeBlocking(opAddEntry,
// new Object[] {}, classes)[0]);
}
public static void main(String[] args) throws Exception {
RPCClient.demo();
}
}
项目之间ws直接的访问
经过测试以上的代码也可以实现同一个Tomcat中的项目A访问项目B
参考文献
- Axis2客户端总是连接超时(Timeout waiting for connection)解决方法 或者 RPCServiceClient必须调用cleanupTransport()方法。 sender.cleanupTransport()
- WebService大讲堂之Axis2.pdf 此时pdf,这里连接到作者博客