说实话,一切知识只要你细心,都能在官网找到,但有些朋友浪费很长时间,就是搞不懂。戒骄戒躁,静下心来。
最近有个同事,凡事都和犟嘴,我躲都躲不了,言必称百度,网易,facebook,google,多小的问题都能上升到哥德巴赫猜想的理论高度,而实际上工作效率极其低下。
我这里想说的是, 少些理论多些实际,你看的见的理论都是从你看不见的地方总结出来的。一步一个脚印吧。
cxf简单不能在简单的webservice发布,难点只有一个,那就是与jdk6冲突问题。网上许多解决方案,但是忽略了一个,jar包版本问题。
${JAVA_HOME}\jdk6\jre\lib\endorsed
在次检查CXF中的jar包,是否是2.2.1.1以上版本,若不然还是报错。删除其他的jax-api 开头的jar必须删除要不还是冲突。
2:服务端代码
package com.cxf.service.server;
import
java.util.List;
import
javax.jws.WebParam;
import
javax.jws.WebService;
/**
*
This
class
was
generated
by
Apache
CXF
2.3.3
*
2012
-
05
-
18T15:26:41.003+08:00
*
Generated
source
version:
2.3.3
*
*/
@WebService
( name =
"orderService"
)
public
interface
OrderService {
String sayHi(
@WebParam
(name=
"text"
)String text);
String sayHiToUser(User user);
String[] SayHiToUserList(List<User> userList);
}
实现类:
package
com.cxf.service.server;
import
java.util.LinkedHashMap;
import
java.util.List;
import
java.util.Map;
import
javax.jws.WebService;
@WebService
(endpointInterface =
"com.cxf.service.server.OrderService"
, serviceName =
"orderService"
)
public
class
OrderProcessImpl
implements
OrderService {
Map<Integer, User>
users
=
new
LinkedHashMap<Integer, User>();
public
String sayHi(String text) {
return
"Hello "
+ text;
}
public
String sayHiToUser(User user) {
users
.put(
users
.size() + 1, user);
return
"Hello "
+ user.getName();
}
public
String[] SayHiToUserList(List<User> userList) {
String[] result =
new
String[userList.size()];
int
i = 0;
for
(User u : userList) {
result[i] =
"Hello "
+ u.getName();
i++;
}
return
result;
}
}
2:web.xml
<? xml version ="1.0" encoding= "UTF-8" ?>
<!
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
>
<
context-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
WEB-INF/beans.xml
</
param-value
>
</
context-param
>
<
listener
>
<
listener-class
>
org.springframework.web.context.ContextLoaderListener
</
listener-class
>
</
listener
>
<
servlet
>
<
servlet-name
>
CXFServlet
</
servlet-name
>
<
display-name
>
CXF Servlet
</
display-name
>
<
servlet-class
>
org.apache.cxf.transport.servlet.CXFServlet
</
servlet-class
>
<
init-param
>
<
param-name
>
config-location
</
param-name
>
<
param-value
>
/WEB-INF/beans.xml
</
param-value
>
</
init-param
>
<
load-on-startup
>
1
</
load-on-startup
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
CXFServlet
</
servlet-name
>
<
url-pattern
>
/services/*
</
url-pattern
>
</
servlet-mapping
>
</
web-app
>
源码就不上传了,太简单了。
3:客户端代码,为了避免兼容性,也是本人太懒我采用的是自动代码生成。请看ant文件内容:
<?xml version="1.0"?>
<project name= "cxf wsdl2java" basedir= "." default= "cxfWSDLToJava">
<property
name=
"cxf.home"
location
=
"${basedir}/WebRoot/WEB-INF/"
/>
<path
id=
"cxf.classpath"
>
<fileset
dir=
"${cxf.home}/lib"
>
<include
name=
"**/*.jar"
/>
</fileset>
</path>
<target
name=
"cxfWSDLToJava"
>
<java
classname=
"org.apache.cxf.tools.wsdlto.WSDLToJava"
fork=
"true"
>
<arg
value=
"-client"
/>
<arg
value=
"-d"
/>
<arg
value=
"client"
/>
<arg
value=
"http://localhost:8080/webserviceCXF/services/OrderService?wsdl"
/>
<classpath>
<path
refid=
"cxf.classpath"
/>
</classpath>
</java>
</target>
</project>