使用 xfire + spring 实现 web service

更新日期: 2017-05-24 阅读次数: 6596 分类: Java

Spring 配置

web.xml

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
		classpath:org/codehaus/xfire/spring/xfire.xml
		/WEB-INF/applicationContext.xml
	</param-value>
</context-param> 

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Xfire Web Service -->
<servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

Java Resources - src - META-INF - xfire - services.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
    <service>
        <name>myService</name>
        <serviceClass>com.sunzhongwei.controller.XfireServiceController</serviceClass>
    </service>
</beans>

实现

package com.sunzhongwei.controller;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import org.codehaus.xfire.MessageContext;

@WebService
public class XfireServiceController {
    @WebMethod(operationName = "sayHi", action = "urn:sayHi")
    @WebResult(name = "myAnswer")
    public String sayHi(MessageContext ctx)
    {
       return "Hello world!";
    }
}

参数说明

WebService

  • name: web service name, 如果在 services.xml 中配置了 service name, 这里就不需要配置啦。等同于 wsdl 文件中的 wsdl:portType
  • targetNamespace
  • serviceName: 等同于 wsdl 文件中的 wsdl:service
  • wsdlLocation
  • endpointInterface

WebMethod

  • operationName: 如果不指定,则取方法名为 operation name。建议不填,保持与方法同名。
  • action

WebParam operation 输入参数的映射关系,同样用于生成 wsdl 文件中的 elements。

  • name
  • targetNamespace
  • mode
  • header

portType 的作用

<portType name="Hello_PortType">
   <operation name="sayHello">
      <input message="tns:SayHelloRequest"/>
      <output message="tns:SayHelloResponse"/>
   </operation>
</portType>

可以认为 portType 是用来声明哪几个 request, response 消息属于同一个接口的。只要前缀一致,就能被自动划分到同一个 operation 下,当然前提是必须属于同一个 portType。

a portType can combine one request and one response message into a single request/response operation. This is most commonly used in SOAP services. A portType can define multiple operations.

参考 WSDL portType Element

JWS

Java Web Service

领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊, 查看更多联系方式。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。同时也欢迎关注我的微信公众号“大象工具”: 大象工具微信公众号

相关文章

爱评论不评论

近期节日

2020年10月31日 世界勤俭日
2020年11月01日 万圣节
2020年11月07日 立冬
2020年11月08日 中国记者日
2020年11月10日 世界青年节
2020年11月11日 光棍节
2020年11月14日 世界糖尿病日
2020年11月17日 国际大学生节
2020年11月20日 国际儿童日
2020年11月21日 世界问候日
2020年11月22日 小雪
2020年11月26日 感恩节
查看更多节日