webservice框架
jdk自带的JWS
eg:
1、服务器端建立
1.1、创建接口
[java] view plaincopy
@WebService
public interface IWebService {
int add(int a, int b);
int subtract(int a, int b);
}
1.2、创建实现类
[java] view plaincopy
@javax.jws.WebService(endpointInterface = “org.gwr.service.IWebService”)
public class WebService implements IWebService {
@Override
public int add(int a, int b) {
System.out.println(a + “+” + b + “=” + (a + b));
return a + b;
}
@Override
public int subtract(int a, int b) {
System.out.println(a + “-” + b + “=” + (a - b));
return a - b;
}
}
1.3、部署服务
直接用Endpoint就可以发布部署,无需服务器
[java] view plaincopy
public class ReleaseService {
public static void main(String[] args) {
String address = “http://localhost:8888/ns“;
Endpoint.publish(address, new WebService());
}
}
2、客户端建立
调用webService
[java] view plaincopy
public class CallService {
public static void main(String[] args) {
// 创建访问wsdl服务地址的url
try {
URL url = new URL(“http://localhost:8888/ns?wsdl“);
// 通过Qname指明服务的具体信息
QName sname = new QName(“http://service.gwr.org/“,
“WebServiceService”);
// 创建服务
Service service = Service.create(url, sname);
// 实现接口
IWebService ms = service.getPort(IWebService.class);
System.out.println(ms.add(12, 33));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
CXF
该框架提供了以下功能:
Web 服务标准支持:CXF 支持以下 Web 服务标准:
Java API for XML Web Services (JAX-WS)
SOAP
Web 服务描述语言(Web Services Description Language ,WSDL)
消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)
WS-Basic Profile
WS-Addressing
WS-Policy
WS-ReliableMessaging
WS-Security
1 首先服务点接口。
package com.demo;
import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
String sayHi(@WebParam(name="text")String text);
String sayHiToUser(User user);
String[] SayHiToUserList(List<User> userList);
}
2 编写服务实现
package com.demo;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
@WebService(endpointInterface="com.demo.HelloWorld",serviceName="HelloWorld")
public class HelloWorldImpl implements HelloWorld {
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;
}
}
3 编写 webServiceApp.java类来暴露 web服务。
package com.demo;
import javax.xml.ws.Endpoint;
public class webServiceApp {
public static void main(String[] args) {
System.out.println("web service start");
HelloWorldImpl implementor= new HelloWorldImpl();
String address="http://localhost:8080/helloWorld";
Endpoint.publish(address, implementor);
System.out.println("web service started");
}
}
4 run webServiceApp.java 类来启动服务。 访问 http://localhost:8080/helloWorld?wsdl 查看是否显示
wsdl。
5 编写客户端访问服务。
package com.demo;
import java.util.ArrayList;
import java.util.List;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWorldClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
svr.setServiceClass(HelloWorld.class);
svr.setAddress("http://localhost:8080/helloWorld");
HelloWorld hw = (HelloWorld) svr.create();
User user = new User();
user.setName("Tony");
user.setDescription("test");
System.out.println(hw.sayHiToUser(user));
}
}
6 测试: run webServiceApp.java 类来启动服务,然后 run HelloWorldClient.java 来访问服务。
XFire创建WebService实例应用
XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,
XFire的配置非常简单,可以非常容易地和Spring集成。
下载地址:http://xfire.codehaus.org/Download。
一. 使用XFire发布WebService
- 创建service接口
Java代码 收藏代码
package com.test.service;
import com.test.service.bean.User;
public interface IHelloService {
public String sayHello(String name);
public User getUser(User user);
}
}
2.创建Service接口的实现类
Java代码 收藏代码
package com.test.service;
import com.test.service.bean.User;
public class HelloService implements IHelloService{
public String sayHello(String name){
return "Hello, "+name;
}
public User getUser(User user) {
User userNew = new User();
userNew.setId("new:"+user.getId());
userNew.setName("new:"+user.getName());
return userNew;
}
}
Java代码 收藏代码
package com.test.service.bean;
public class User {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.在web.xml文件中进行XFire拦截配置,可参照官网提供的sample。
Xml代码 收藏代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
4.在class目录下建立META-INF目录,如(META-INF>xifre->services.xml),
在services.xml文件中进行webservice服务的发布,可参照官网提供的sample。
Xml代码 收藏代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloService</name>
<serviceClass>com.test.service.IHelloService</serviceClass>
<implementationClass>com.test.service.HelloService</implementationClass>
</service>
</beans>
5.将xfire的Jar包和相关依赖包拷到系统应用中,在Tomcat下部署应用。
启动tomcat后访问服务(需在应用后加上/services,webservice才会进行拦截):
例:http://localhost:8080/ws2/services。(IE下有时无法显示列表,可用其它浏览器显示或指定接口名称)
界面如下:
点击后查看详细的wsdl文档,不同的浏览器下访问会有区别,展示效果不一致。
二.建立XFire客户端进行调用
1.本地客户端调用,与webservice服务在同一应用。
Java代码 收藏代码
package com.test.client;
import java.net.MalformedURLException;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.test.service.IHelloService;
import com.test.service.bean.User;
public class ClientTest {
public static void main(String args[]) throws MalformedURLException {
Service service = new ObjectServiceFactory().create(IHelloService.class);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
.newInstance().getXFire());
String url = "http://localhost:8080/ws2/services/HelloService";
IHelloService helloService = (IHelloService) factory.create(service,url);
System.out.println(helloService.sayHello("张三"));
User user = new User();
user.setName("张三");
System.out.println(helloService.getUser(user).getName());
}
}
执行结果如下:
Java代码 收藏代码
Hello, 张三
new:张三
利用XFire创建build.xml文件生成客户端代码调用webservice服务
2.1在src目录下创建build.properties文件,配置如下:
Java代码 收藏代码src.dir=${basedir}
lib.dir=D:/myspace/ws2/WebRoot/WEB-INF/lib
wsdl.dir=http://localhost:8080/ws2/services/HelloService?wsdl2.2在src目录下创建build.xml文件,配置如下:
Xml代码 收藏代码