1、定义服务接口
import java.util.List;
import javax.jws.WebService;
@WebService
public interface ServiceDemo {
public String sayHello(String name);
public List<String> getUser();
}
2、定义接口属性类
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import service.ServiceDemo;
@WebService(targetNamespace = "http://server.demo/", endpointInterface = "service.ServiceDemo", serviceName = "ServiceDemo", portName = "ServiceDemopott")
public class ServiceDemoImpl implements ServiceDemo {
private List<String> list = new ArrayList<String>();
public ServiceDemoImpl() {
list.add("张三");
list.add("李四");
list.add("王五");
}
@Override
public String sayHello(String name) {
return name == null || "".equals(name) ? "" : name + ":你好!";
}
@Override
public List<String> getUser() {
return list;
}
}
3、发布服务:
package junit.test;
import javax.xml.ws.Endpoint;
import service.ServiceDemo;
import service.impl.ServiceDemoImpl;
public class Test {
public static void main(String[] args) {
String address = "http://localhost:9899/ServiceDemo/";
ServiceDemo serviceDemo = new ServiceDemoImpl();
Endpoint.publish(address, serviceDemo);
}
}
4、测试发布的服务,在浏览器输入地址:http://localhost:9899/ServiceDemo/?wsdl 出现下列页面,表示发布成功:
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><definitions targetNamespace="http://server.demo/" name="ServiceDemo"><import namespace="http://service/" location="http://localhost:9899/ServiceDemo/?wsdl=1"/><binding name="ServiceDemopottBinding" type="ns1:ServiceDemo"><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><operation name="sayHello"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation><operation name="getUser"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation></binding><service name="ServiceDemo"><port name="ServiceDemopott" binding="tns:ServiceDemopottBinding"><soap:address location="http://localhost:9899/ServiceDemo/"/></port></service></definitions>
上面红色标记为客户调用时的关键信息,分别为命名查找和生成的服务节点。
5.、客户端调用可以通过俩种方式。
第一种是动态生成客户端代理对象的调用:
package junit.test;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import org.junit.BeforeClass;
import org.junit.Test;
import com.demo.client.ServiceDemo;
import com.demo.client.ServiceDemo_Service;
public class TestClientDemo {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public void qname() {
final QName SERVICE_NAME = new QName("http://server.demo/",
"ServiceDemo");
Service service = null;
try {
service = Service.create(new URL(
"http://localhost:9899/ServiceDemo/?wsdl"), SERVICE_NAME);
ServiceDemo serviceDemo = service.getPort(ServiceDemo.class);
System.out.println(serviceDemo.sayHello("xiaozhang"));
List<String> l = serviceDemo.getUser();
for (String s : l)
System.out.println(s);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
第二种是用jdk自带的wsimport生成客户端代码,在dos窗口中键入:wsimport -keep -p com.demo.client http://localhost:9899/ServiceDemo/?wsdl
将dos当前路径下生成的包com/demo/client 拷贝中项目中。
package junit.test;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import org.junit.BeforeClass;
import org.junit.Test;
import com.demo.client.ServiceDemo;
import com.demo.client.ServiceDemo_Service;
public class TestClientDemo {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public void sayHello() {
ServiceDemo_Service serviceDemoService = new ServiceDemo_Service();
ServiceDemo serviceDemo = (ServiceDemo) serviceDemoService
.getServiceDemopott();
System.out.println(serviceDemo.sayHello("张三"));
}
@Test
public void getUser() {
ServiceDemo_Service serviceDemoService = new ServiceDemo_Service();
ServiceDemo serviceDemo = (ServiceDemo) serviceDemoService
.getServiceDemopott();
List<String> l = serviceDemo.getUser();
for (String s : l)
System.out.println(s);
}
}