Spring与axis结合调用 WebService

在这篇文章中http://xace.iteye.com/blog/687457 ,
我们使用XFire发布了Web Service,现在我们使用axis作为客户端,调用这个服务

因为Web服务是平台无关的,每个WSDL文件即能描述服务的全部信息,我们首先借助axis的WSDL2Java工具,将WSDL文件转化为java类
java -cp lib\axis.jar;lib\commons-logging.jar;lib\commons-discovery.jar;lib\jaxrpc.jar;lib\saaj.jar;lib\wsdl4j.jar org.apache.axis.wsdl.WSDL2Java -v -W -o src -p demo.webservice.client http://localhost:8888/BookService?wsdl
pause

生成的代码在/demo/webservice/client目录中

我们观察http://localhost:8888/BookService?wsdl地址的WSDL文件,其中关键部分:

<wsdl:definitions targetNamespace="http://server.webservice.demo">

<wsdl:service name="BookService">
<wsdl:port name="BookServiceHttpPort" binding="tns:BookServiceHttpBinding">
<wsdlsoap:address location="http://localhost:8888/BookService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>



  public static void main(String[] args) 
throws ServiceException, MalformedURLException, RemoteException {
// 客户端调用代码符合标准JAX-RPC接口,不会和具体底层框架绑定
String wsdl = "http://localhost:8888/BookService?wsdl";
String namespaceUri = "http://server.webservice.demo";
String serviceName = "BookService";
String portName = "BookServiceHttpPort";
QName serviceQN = new QName(namespaceUri, serviceName);
QName portQN = new QName(namespaceUri, portName);
ServiceFactory factory = ServiceFactory.newInstance();
Service srv = factory.createService(new URL(wsdl), serviceQN);
BookServicePortType service =
(BookServicePortType) srv.getPort(portQN, BookServicePortType.class);
SearchResponse search = service.search(new Search("j2ee"));
System.out.println(Arrays.toString(search.getOut()));

// 通过Spring JaxRpcPortProxyFactoryBean 取得
ApplicationContext context =
new ClassPathXmlApplicationContext("config.xml");
MyService springService = (MyService) context.getBean("bookService");
search = springService.search(new Search("j2ee"));
System.out.println(Arrays.toString(search.getOut()));
}



  <bean id="bookService"   
class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
<!--
BookServicePortType远程调用方法都将抛出RemoteException,可以自定义一个具有
相同方法签名的接口,不抛出异常。这样客户端不知道自己调用的是Web服务,解耦
-->
<property name="serviceInterface" value="demo.webservice.client.MyService" />
<property name="portInterface"
value="demo.webservice.client.BookServicePortType" />
<property name="wsdlDocumentUrl"
value="http://localhost:8888/BookService?wsdl" />
<property name="namespaceUri" value="http://server.webservice.demo" />
<property name="serviceName" value="BookService" />
<property name="portName" value="BookServiceHttpPort" />
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值