最近学习了点webservice相关知识,为了以后可以及时参考,写个简单实例放着:
服务端:
现建立一个接口:
import javax.jws.WebParam;
import javax.jws.WebService;
/**
*
* @author hjglddok
*/
@WebService
public interface ServerInterface {
public Person getPerson();
public void setPerson(Person person);
//当然这里可以不用@WebParam,但是,当转换成wsdl文件时,是以arg[0..]命名
public Person show(@WebParam(name="name") String name,@WebParam(name="pass") String pass,@WebParam(name="count") int count);
}
接着实现:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hjglddok.service;
import javax.jws.WebService;
/**
*
* @author hjglddok
*/
@WebService(endpointInterface="com.hjglddok.service.ServerInterface",serviceName="serv")
public class WebServer implements ServerInterface{
private Person person;
@Override
public Person getPerson() {
return person;
}
@Override
public void setPerson(Person person) {
this.person = person;
}
@Override
public Person show(String name, String pass, int count) {
this.person = new Person();
person.setName(name);
person.setPass(pass);
person.setCount(count);
return person;
}
}
还有一个Person类:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hjglddok.service;
/**
*
* @author hjglddok
*/
/**
* 这里为普通类不需要注入@WebService信息,CXF会自动处理。
*/
public class Person {
private String name;
private String pass;
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
最后当然要发布了:
package com.hjglddok.service;
import javax.xml.ws.Endpoint;
/**
*
* @author hjglddok
*/
public class Main {
public Main() {
}
//还有一种更灵活的配置方法,当这个最简单
public static void main(String[] args){
System.out.println("Server start...");
WebServer server = new WebServer();
Endpoint.publish("http://localhost:8080/show", server);
}
}
客户端如下:
package com.hjglddok.client;
import com.hjglddok.web.Person;
import com.hjglddok.web.ServerInterface;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
/**
*
* @author hjglddok
*/
public class ClientMain {
public static void main(String[] args){
try {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ServerInterface.class);
factory.setAddress("http://localhost:8080/show");
ServerInterface client = (ServerInterface)factory.create();
Person p = new Person();
p.setName("liu");
p.setPass("dan");
p.setCount(1);
client.setPerson(p);
//下面两句我是想试试webservice是否是有状态。事实上是有状态请求
Person per = client.getPerson();
System.out.println(per.getName());
Person person = client.show("aguang","liudan",56);
System.out.println(person.getName());
System.out.println(person.getPass());
System.out.println(person.getCount());
} catch (Exception ex) {
Logger.getLogger(ClientMain.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
以上cxf应用还是相对简单。当然也可以集成到spring环境中,还有一点以上应用可以在非web容器中运行
服务端:
现建立一个接口:
import javax.jws.WebParam;
import javax.jws.WebService;
/**
*
* @author hjglddok
*/
@WebService
public interface ServerInterface {
public Person getPerson();
public void setPerson(Person person);
//当然这里可以不用@WebParam,但是,当转换成wsdl文件时,是以arg[0..]命名
public Person show(@WebParam(name="name") String name,@WebParam(name="pass") String pass,@WebParam(name="count") int count);
}
接着实现:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hjglddok.service;
import javax.jws.WebService;
/**
*
* @author hjglddok
*/
@WebService(endpointInterface="com.hjglddok.service.ServerInterface",serviceName="serv")
public class WebServer implements ServerInterface{
private Person person;
@Override
public Person getPerson() {
return person;
}
@Override
public void setPerson(Person person) {
this.person = person;
}
@Override
public Person show(String name, String pass, int count) {
this.person = new Person();
person.setName(name);
person.setPass(pass);
person.setCount(count);
return person;
}
}
还有一个Person类:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hjglddok.service;
/**
*
* @author hjglddok
*/
/**
* 这里为普通类不需要注入@WebService信息,CXF会自动处理。
*/
public class Person {
private String name;
private String pass;
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
最后当然要发布了:
package com.hjglddok.service;
import javax.xml.ws.Endpoint;
/**
*
* @author hjglddok
*/
public class Main {
public Main() {
}
//还有一种更灵活的配置方法,当这个最简单
public static void main(String[] args){
System.out.println("Server start...");
WebServer server = new WebServer();
Endpoint.publish("http://localhost:8080/show", server);
}
}
客户端如下:
package com.hjglddok.client;
import com.hjglddok.web.Person;
import com.hjglddok.web.ServerInterface;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
/**
*
* @author hjglddok
*/
public class ClientMain {
public static void main(String[] args){
try {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ServerInterface.class);
factory.setAddress("http://localhost:8080/show");
ServerInterface client = (ServerInterface)factory.create();
Person p = new Person();
p.setName("liu");
p.setPass("dan");
p.setCount(1);
client.setPerson(p);
//下面两句我是想试试webservice是否是有状态。事实上是有状态请求
Person per = client.getPerson();
System.out.println(per.getName());
Person person = client.show("aguang","liudan",56);
System.out.println(person.getName());
System.out.println(person.getPass());
System.out.println(person.getCount());
} catch (Exception ex) {
Logger.getLogger(ClientMain.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
以上cxf应用还是相对简单。当然也可以集成到spring环境中,还有一点以上应用可以在非web容器中运行