最近项目中要用到探测webservice服务端的信息,在网上查询后了解到apache cxf提供了这部分功能,支持包在附件中。
具体使用如下:
将支持包放到webservice服务项目lib目录下,提供udp探测功能。
客户端探测实现代码:
public class WsClientDiscovery {
public static void main(String[] args) {
Bus bus = null;
try {
bus = BusFactory.newInstance().createBus();
WSDiscoveryClient client = new WSDiscoveryClient(bus);
client.setAddress("soap.udp://192.168.0.143:3702"); //服务端地址和udp端口地址
ProbeType pt = new ProbeType();
ScopesType scopes = new ScopesType();
pt.setScopes(scopes);
ProbeMatchesType pmts = client.probe(pt);
List<ResolveMatchType> rmts = new LinkedList<ResolveMatchType>();
for (ProbeMatchType pmt : pmts.getProbeMatch()) {
rmts.add(client.resolve(pmt.getEndpointReference()));
}
int i = 0;
for (ResolveMatchType rmt : rmts) {
i++;
String address = rmt.getXAddrs().iterator().next(); //服务端提供服务
QName qname = rmt.getTypes().iterator().next();
if (qname.toString().contains("RemoteWSServer")) {
RemoteWSServer port = rmt.getEndpointReference().getPort(
RemoteWSServer.class);
((BindingProvider) port).getRequestContext().put(
BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://192.168.0.143:8081/remote/services/remoteWSServerRemote");
List<String> l = port.list();
System.out.println(l);
}
}
client.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
bus.shutdown(true);
}
}
}
另外,google中也有相同功能的开源项目:https://code.google.com/p/java-ws-discovery/