使用 xfire + spring 实现 web service

更新日期: 2017-05-24 阅读次数: 10369 分类: 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 聊聊, 查看更多联系方式