服务器端
接口
接口类@WebService 修饰
方法 ws不能处理的类Map
@XmlJavaTypeAdapter(MapAdapter.class)修饰 MapAdapter为处理类
实现
实现类
@WebService(endpointInterface=”com.sun.ws.cxf.HelloWorld”,serviceName=”HelloWorld”)修饰 serviceName为wsdl definitions的name
发布web service服务
public static void main(String[] args) {
HelloWorld hw = new HelloWorldWs();
EndpointImpl ep = (EndpointImpl)Endpoint.publish("http://127.0.0.1/hello_ws", hw);
ep.getInInterceptors().add(new AuthInterceptor());//权限控制
System.out.println("Web Service 发布成功。");
}
解决ws不能处理的类型
使用@XmlJavaTypeAdapter(MapAdapter.class)修饰 MapAdapter为处理类
其中自定义的MapAdapter需继承XmlAdapter<>并实现unmarshal和marshal方法
查看wsdl
http://127.0.0.1/hello_ws?wsdl
客户端
生成客户端代码
cmd 切到工程目录src下 命令
wsdl2java http://127.0.0.1/hello_ws?wsdl
客户端调用
public static void main(String[] args) {
//继承Service的类,该类的实例可当成工厂来使用 调用getXxxPort方法,返回远程Web Service代理
HelloWorld factory = new HelloWorld();
com.sun.ws.cxf.HelloWorld hw = factory.getHelloWorldWsPort();
//权限控制
Client client = ClientProxy.getClient(hw);
client.getOutInterceptors().add(new LoggingOutInterceptor());
client.getOutInterceptors().add(new AddHeaderInterceptor("admin","123"));
System.out.println(hw.sayHi("Mr Sun"));
User user = new User();
user.setName("admin");
user.setPass("root");
List<Cat> list = hw.getCatsByUser(user);
for (Cat cat : list) {
System.out.println(cat.toString());
}
StringCat sc = hw.getAllCats();
for(Entry entry : sc.getEntries()){
System.out.println(entry.getKey()+":"+entry.getValue().getName());
}
}
权限控制
自定义的权限控制类需继承AbstractPhaseInterceptor< SoapMessage>并实现handleMessage方法