使用 xfire + spring 实现 web service

更新日期: 2017-05-24 阅读次数: 6004 分类: 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

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

关于作者

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

相关文章

爱评论不评论

近期节日

2020年06月05日 世界环境日
2020年06月05日 芒种
2020年06月06日 全国爱眼日
2020年06月11日 中国人口日
2020年06月20日 世界难民日
2020年06月21日 父亲节
2020年06月21日 夏至
2020年06月22日 中国儿童慈善活动日
2020年06月23日 国际奥林匹克日
2020年06月25日 全国土地日
2020年06月25日 端午节
2020年06月26日 国际禁毒日
查看更多节日