补充生成命令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
}
]
|