webservice相关知识

xfire+spring+maven构建webservice服务器和客户端

本人由于最近项目需要设计一个webservice相关接口,虽然这种接口方式已经逐渐被restful接口取代,但有时候也是需要用到的。这不我之前一直用restful接口,现在就被安排了一个webservice接口,自己顺带着又学习了一把。
  1. 首先要搭建一个web项目用来开发webservice服务端,我们采用maven项目来搭建,方便jar包管理:
    先上pom.xml文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.ljj</groupId>
 <artifactId>xfireServer</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>xfireServer Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>3.8.1</version>
     <scope>test</scope>
   </dependency>
   <dependency>
   	<groupId>org.codehaus.xfire</groupId>
   	<artifactId>xfire-core</artifactId>
   	<version>1.2.5</version>
   </dependency> 
   <dependency>
   	<groupId>org.codehaus.xfire</groupId>
   	<artifactId>xfire-spring</artifactId>
   	<version>1.2.6</version>
   </dependency> 
   <dependency>  
     <groupId>org.springframework</groupId>  
     <artifactId>spring-web</artifactId>  
     <version>3.2.8.RELEASE</version>  
   </dependency>  
 </dependencies>
 <build>
   <finalName>xfireServer</finalName>
 </build>
</project>

这里需要引入xfire与spring的相关jar包。
2. 接下来需要配置web.xml文件

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
 <display-name>Archetype Created Web Application</display-name>
 <listener>
         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   <context-param>
   	<param-name>contextConfigLocation</param-name>
   	<param-value>classpath:spring/*.xml</param-value>
   </context-param>
   <!-- springmvc 上下文监听器  ContextLoaderListener-->
    <servlet>  
     <servlet-name>xfire</servlet-name>  
     <servlet-class>  
      org.codehaus.xfire.spring.XFireSpringServlet  
     </servlet-class>  
    </servlet>  
    <servlet-mapping>  
     <servlet-name>xfire</servlet-name>  
     <url-pattern>/service/*</url-pattern>  
    </servlet-mapping>  
</web-app>

需要配置spring上下文监听器和xfire的servert配置
3.接下来需要开发对应的service方法类了,例如:
接口类:

package com.ljj.service;

public interface BookService {
  public String getBook(String xml);
}

接口实现类:

package com.ljj.serviceimpl;

import com.ljj.service.BookService;

public class BookServiceImpl implements BookService {

  public String getBook(String xml) {
    return xml;
  }

}

4.业务处理service类写完之后,就需要配置xfire与service之前的关联了
新建applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!--引入xfire配置-->
 	<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />   
 	<!-- 使用XFire导出器 我们通过XFireExporter将业务类导出为Web Service,对于任何导出器,
     我们都需要引入XFire环境,即serviceFactory和xfire,这是标准的配置。ServiceFactory是
     XFire的核心类,它可以将一个POJO生成为一个Web Service。在本实例中,我们通过定义一个
     baseWebService,其余的webService配置都将该bean作为父bean,这样可以简化Spring的配置,
     不需要多次引入serviceFactory和xfire。-->
 	 <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">    
 	 <!-- 引用xfire.xml中定义的工厂 -->
 	  <property name="serviceFactory" ref="xfire.serviceFactory" />    
 	  <!-- 引用xfire.xml中的xfire实例 -->
 	  <property name="xfire" ref="xfire" />   
 	 </bean>   
 	 <!-- 配置业务服务service类 -->
 	 <bean id="bookWS" class="com.ljj.serviceimpl.BookServiceImpl"> 
 	 </bean>   
 	 <bean id="bookService" parent="baseWebService">    
 	 <!-- 业务服务bean -->
 	  <property name="serviceBean" ref="bookWS" />    
 	   <!-- 业务服务bean的对应接口类 -->
 	  <property name="serviceClass" value="com.ljj.service.BookService" />   
 	 </bean> 
</beans>

5.到这里webservice服务端基本完成,需要简单测试一下:
启动服务后在浏览器访问:http://localhost:8080/xfireServer/service/BookService?wsdl看到如下页面即为成功

<wsdl:definitions xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://service.ljj.com" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" targetNamespace="http://service.ljj.com">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://service.ljj.com">
<xsd:element name="getBook">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getBookResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getBookRequest">
<wsdl:part name="parameters" element="tns:getBook"> </wsdl:part>
</wsdl:message>
<wsdl:message name="getBookResponse">
<wsdl:part name="parameters" element="tns:getBookResponse"> </wsdl:part>
</wsdl:message>
<wsdl:portType name="BookServicePortType">
<wsdl:operation name="getBook">
<wsdl:input name="getBookRequest" message="tns:getBookRequest"> </wsdl:input>
<wsdl:output name="getBookResponse" message="tns:getBookResponse"> </wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BookServiceHttpBinding" type="tns:BookServicePortType">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getBook">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getBookRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getBookResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="BookService">
<wsdl:port name="BookServiceHttpPort" binding="tns:BookServiceHttpBinding">
<wsdlsoap:address location="http://10.1.33.96:8080/xfireServer/service/BookService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

6.编写测试客户端——同样适用maven项目,采用动态访问方式:
pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.ljj</groupId>
  <artifactId>xfireClient</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>xfireClient</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
	<groupId>org.codehaus.xfire</groupId>
	<artifactId>xfire-all</artifactId>
	<version>1.2.6</version>
	</dependency>
  </dependencies>
</project>

client测试代码:

package com.ljj.xfireClient;

import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.client.Client;

/**
 * Hello world!
 *
 */
public class App {
  public static void main(String[] args) throws MalformedURLException, Exception {
    System.out.println("Hello World!");
    Client client =
        new Client(new URL("http://127.0.0.1:8080/xfireServer/service/BookService?wsdl"));
    Object[] results2 = client.invoke("getBook", new Object[] {"success"});
    System.out.println(results2[0]);
  }
}

7.最后附上程序源码供参考:https://gitee.com/fdwokers/xfireWebservice

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值