Spring+CXF+Maven发布Webservice

补充生成命令Demo:

wsimport -s F:\\workspaceMaven\\mavenProjectB\\src  -p com.jk.service -keep http://localhost:8083/mavenProjectA/services/RemoteService?wsdl

关于发布地址拼接的解释:

mavenProjectA 项目名

services web.xml 中 <url-pattern>/services/*</url-pattern>配置的,要拦截请求的关键字

RemoteService <jaxws:endpoint id="remoteServiceEndPoint" implementor="com.ken.webservice.impl.RemoteServiceImpl" address="/RemoteService"></jaxws:endpoint>

Spring-context.xml中address属性的值


转载自cnblogs KenNgai 详细好用,特别感谢!分享给更多需要的朋友。

使用CXF发布WebService简单又快速,还可以与Spring集成,当Web容器启动时一起发布WebService服务。本例是简单的客户端给服务端发送订单信息,服务端返回订单转为json的字符串。

1.使用maven管理jar包,首先在maven添加使用到的cxf jar包依赖,到CXF官网上找到Maven的依赖内容。

网址如下:http://cxf.apache.org/docs/using-cxf-with-maven.html

我使用的是Tomcat所以引用前两项就可以了

1
2
3
<properties>
   <cxf.version> 2.2 . 3 </cxf.version>
</properties>
1
2
3
4
5
6
7
8
9
10
<dependency>
         <groupId>org.apache.cxf</groupId>
         <artifactId>cxf-rt-frontend-jaxws</artifactId>
         <version>${cxf.version}</version>
     </dependency>
     <dependency>
         <groupId>org.apache.cxf</groupId>
         <artifactId>cxf-rt-transports-http</artifactId>
         <version>${cxf.version}</version>
     </dependency>

其它jar包依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version> 1.2 . 32 </version>
</dependency>
<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-core</artifactId>
     <version>${spring.version}</version>
</dependency>
<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-web</artifactId>
     <version>${spring.version}</version>
</dependency>
<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>${spring.version}</version>
</dependency>
<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-beans</artifactId>
     <version>${spring.version}</version>
</dependency>

2.创建简单的订单类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package  com.ken.model;
 
import  java.io.Serializable;
 
public  class  Order  implements  Serializable {
     
     private  String  OrderNo;
     private  String  itemCode;
     private  String  itemName;
     private  Long quantity;
     
     public  String  getOrderNo() {
         return  OrderNo;
     }
     public  void  setOrderNo( String  orderNo) {
         OrderNo = orderNo;
     }
     public  String  getItemCode() {
         return  itemCode;
     }
     public  void  setItemCode( String  itemCode) {
         this .itemCode = itemCode;
     }
     public  String  getItemName() {
         return  itemName;
     }
     public  void  setItemName( String  itemName) {
         this .itemName = itemName;
     }
     public  Long getQuantity() {
         return  quantity;
     }
     public  void  setQuantity(Long quantity) {
         this .quantity = quantity;
     }
 
}

3.WebService接口及实现类:

3.1接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package  com.ken.webservice;
 
import  java.util.List;
 
import  javax.jws.WebParam;
import  javax.jws.WebService;
 
import  com.ken.model.Order;
 
@WebService
public  interface  IRemoteService {
     
     public  String  showRemoteMessage(@WebParam(name= "arg0" String  message);
     
     public  String  addOrder(List<Order> orders);
 
}

3.2接口实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package  com.ken.webservice.impl;
 
import  java.util.List;
 
import  javax.jws.WebService;
 
import  com.alibaba.fastjson.JSON;
import  com.alibaba.fastjson.JSONArray;
import  com.ken.model.Order;
import  com.ken.webservice.IRemoteService;
 
 
@WebService(endpointInterface= "com.ken.webservice.IRemoteService" //endpointInterface这个不能写错了
public  class  RemoteServiceImpl  implements  IRemoteService {
     
     public  String  showRemoteMessage( String  message) {
         return  "You message is " + message;
     }
 
     public  String  addOrder(List<Order> orders) {
         return  JSONArray.toJSONString(orders, true );
     }
     
}

4.配置Spring-context.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version= "1.0"  encoding= "UTF-8" ?>
<beans xmlns= "http://www.springframework.org/schema/beans"
        xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jaxws= "http://cxf.apache.org/jaxws"
        xsi:schemaLocation="http: //www.springframework.org/schema/beans
        http: //www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http: //cxf.apache.org/jaxws
        http: //cxf.apache.org/schemas/jaxws.xsd">
 
     < import  resource= "classpath*:META-INF/cxf/cxf.xml"  />
     < import  resource= "classpath*:META-INF/cxf/cxf-extension-soap.xml"  />
     < import  resource= "classpath*:META-INF/cxf/cxf-servlet.xml"  />
     
     <jaxws:endpoint id= "remoteServiceEndPoint"  implementor= "com.ken.webservice.impl.RemoteServiceImpl"  address= "/RemoteService" ></jaxws:endpoint>
</beans>

5.配置web.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!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>
   
   <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:spring-context.xml</param-value>
   </context-param>
   
   <listener>
         <listener- class >org.springframework.web.context.ContextLoaderListener</listener- class >
   </listener>
   
   <servlet>
     <servlet-name>CXFServlet</servlet-name>
     <servlet- class >org.apache.cxf.transport.servlet.CXFServlet</servlet- class >
      <load-on-startup> 1 </load-on-startup>
   </servlet>
   
   <servlet-mapping>
      <servlet-name>CXFServlet</servlet-name>
      <url-pattern>/services/*</url-pattern>
   </servlet-mapping>
</web-app>

 完成上面的步骤后就可以启动Tomcat并访问

wsdl:

http://localhost:8080/IHealth.Web/services/RemoteService?wsdl

6.客户端调用服务

cmd到其项目的src目录并执行命令就会解析生成相应的调用代码,命令:wsimport -keep http://localhost:8080/IHealth.Web/services/RemoteService?wsdl

 

生成好刷新下src目录就会看到生成的代码,如下

 

此时就可以写调用代码了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package  com.ken.client;
 
import  java.util.ArrayList;
import  java.util.List;
 
import  com.ken.webservice.Order;
import  com.ken.webservice.impl.IRemoteService;
import  com.ken.webservice.impl.RemoteServiceImplService;
 
public  class  Client {
 
     public  static  void  main( String [] args) {
         
          //创建一个用于产生RemoteServiceImplService实例的工厂,RemoteServiceImplService类是wsimport工具生成的
         RemoteServiceImplService factory =  new  RemoteServiceImplService();
         
         //通过工厂生成一个IRemoteService实例,IRemoteService是wsimport工具生成的
         IRemoteService service = factory.getRemoteServiceImplPort();
         
         String  result = service.showRemoteMessage( "Ken" );
         System.out.println(result);
         
         List<Order> orders =  new  ArrayList<Order>();
         Order order1 =  new  Order();
         order1.setOrderNo( "201706048888" );
         order1.setItemCode( "A10000001" );
         order1.setItemName( "IPHONE" );
         order1.setQuantity(100L);
         orders.add(order1);
         
         Order order2 =  new  Order();
         order2.setOrderNo( "201706048888" );
         order2.setItemCode( "A10000002" );
         order2.setItemName( "MAC" );
         order2.setQuantity(200L);
         orders.add(order2);
         
         String  resultOrder = service.addOrder(orders);
         System.out.println(resultOrder);
         
 
     }
 
}

 运行后控制台内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
You message  is  Ken
[
     {
         "itemCode" : "A10000001" ,
         "itemName" : "IPHONE" ,
         "orderNo" : "201706048888" ,
         "quantity" : 100
     },
     {
         "itemCode" : "A10000002" ,
         "itemName" : "MAC" ,
         "orderNo" : "201706048888" ,
         "quantity" : 200
     }
]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的SSM+CXF+WebService+JSP的demo: 1. 创建一个Maven项目,添加以下依赖: ```xml <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.18.RELEASE</version> </dependency> <!-- CXF --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.4.0</version> </dependency> <!-- JSP --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> ``` 2. 配置web.xml文件: ```xml <web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/dispatcherServlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 3. 配置applicationContext.xml文件: ```xml <beans> <!-- 配置数据源 --> <!-- 配置MyBatis --> <!-- 配置Spring事务管理 --> <!-- 配置WebService服务 --> <bean id="helloService" class="com.example.service.HelloServiceImpl"/> <bean id="cxf" class="org.apache.cxf.jaxws.JaxWsServerFactoryBean"> <property name="serviceClass" value="com.example.service.HelloService"/> <property name="address" value="/hello"/> <property name="serviceBean" ref="helloService"/> </bean> </beans> ``` 4. 配置dispatcherServlet.xml文件: ```xml <beans> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <context:component-scan base-package="com.example.controller"/> </beans> ``` 5. 创建HelloService接口: ```java @WebService public interface HelloService { @WebMethod String sayHello(String name); } ``` 6. 创建HelloServiceImpl实现类: ```java @Service public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` 7. 创建一个Controller: ```java @Controller public class HelloController { @Autowired private HelloService helloService; @RequestMapping("/hello") public ModelAndView hello(String name) { String message = helloService.sayHello(name); ModelAndView mav = new ModelAndView("hello"); mav.addObject("message", message); return mav; } } ``` 8. 创建一个JSP视图,放在/WEB-INF/views/hello.jsp: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello</title> </head> <body> <h1>${message}</h1> </body> </html> ``` 9. 启动Tomcat服务器,访问http://localhost:8080/hello?name=world,应该能够看到页面上显示"Hello, world!"。 以上就是一个简单的SSM+CXF+WebService+JSP的demo,希望能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值