1、导入用到的jar包:
aopalliance-1.0.jar
commons-logging-1.0.4.jar
cxf-2.2.9.jar
geronimo-activation_1.1_spec-1.0.2.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-javamail_1.4_spec-1.6.jar
geronimo-jaxws_2.1_spec-1.0.jar
geronimo-jms_1.1_spec-1.1.1.jar
geronimo-servlet_2.5_spec-1.2.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
geronimo-ws-metadata_2.0_spec-1.1.2.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.13.jar
jaxb-xjc-2.1.13.jar
jetty-6.1.21.jar
jetty-util-6.1.21.jar
jsr311-api-1.1.1.jar
log4j-1.2.14.jar
neethi-2.0.4.jar
saaj-api-1.3.jar
saaj-impl-1.3.2.jar
spring-beans-2.5.6.jar
spring-context-2.5.6.jar
spring-context-support-2.5.6.jar
spring-core-2.5.6.jar
spring-jms-2.5.6.jar
spring-tx-2.5.6.jar
spring-web-2.5.6.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.9.jar
xml-resolver-1.2.jar
XmlSchema-1.4.5.jar
在web.xml中配置:
<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>/*</url-pattern>
</servlet-mapping>
2、定义接口,实现接口:
package ws.demo;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import ws.domain.User;
@WebService
public interface HelloWorld {
@WebMethod
public String sayHello(@WebParam(name="name") String name);
@WebMethod
public String sayHelloUser(@WebParam(name="user") User user);
@WebMethod
public List<User> findUser();
}
接口实现类:
package ws.demo;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import ws.domain.User;
@WebService(endpointInterface="ws.demo.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHello(String name) {
System.out.println("server : hello " + name);
return "hello "+name;
}
@Override
public List<User> findUser() {
List<User> users = new ArrayList<User>();
System.out.println("server find all user!!!");
User user = new User();
user.setId(1);
user.setName("kai");
User user1 = new User();
user1.setId(2);
user1.setName("kaikai");
users.add(user);
users.add(user1);
return users;
}
@Override
public String sayHelloUser(User user) {
System.out.println("server : hello user "+user.getName());
return "server "+user.getName();
}
}
用到的User类:
package ws.domain;
import javax.xml.bind.annotation.XmlType;
@XmlType(name = "User")
public class User {
private Integer id;
private String name;
/**
* @return the id
*/
public Integer getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}
3、写服务端并发布:
package ws.demo;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class MyServer {
public static void main(String[] args) {
JaxWsServerFactoryBean serverFactory = new JaxWsServerFactoryBean();
serverFactory.setServiceClass(HelloWorldImpl.class);
serverFactory.setAddress("http://localhost:8080/helloword");
Server server = serverFactory.create();
server.start();
}
}
4、写客户端:
package ws.demo;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class MyClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean proxyFactory = new JaxWsProxyFactoryBean();
proxyFactory.setServiceClass(HelloWorld.class);
proxyFactory.setAddress("http://localhost:8080/helloword");
HelloWorld hw = (HelloWorld)proxyFactory.create();
hw.sayHello("abc");
}
}
如果用spring发布服务端:
1、在WEB-INF下写beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- START SNIPPET: beans -->
<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.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="helloWorld"
implementor="ws.demo.HelloWorldImpl"
address="/HelloWorld" />
</beans>
<!-- END SNIPPET: beans -->
然后在web.xml中配置:
<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>
2、新建客户端项目工程:
1)用命令wsdl2java http://ip:port/projectname/HelloWorld?wsdl生成所需文件
2)将生成文件打包导入此工程中。
3)在src下新建beans.xml
<?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.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<jaxws:client
id="helloWorldClient"
address="http://ip:port/projectname/HelloWorld"
serviceClass="ws.demo.HelloWorld"/>
</beans>
4)写客户端:
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ws.demo.HelloWorld;
import ws.demo.User;
public class WsClient {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorldClient");
User user = new User();
user.setId(1);
user.setName("a");
System.out.println("clien: "+helloWorld.sayHelloUser(user));
List<User> users = helloWorld.findUser();
for(User u : users) {
System.out.println("id:"+u.getId()+" ,name:"+u.getName());
}
}
}