Web services 使用apachecxf进行WS-Discovery。如何指定设备类型?
我将使用ApacheCXF提供与ONVIF兼容的ip摄像头服务。它使用WS-Discovery查找设备和服务以及现成的: cxf服务ws-discovery服务jar将注册 将自动发布“Hello”的ServerLifeCycleListener 信息。它还将响应与 它发布的服务Web services 使用apachecxf进行WS-Discovery。如何指定设备类型?,web-services,cxf,onvif,ws-discovery,Web Services,Cxf,Onvif,Ws Discovery,我将使用ApacheCXF提供与ONVIF兼容的ip摄像头服务。它使用WS-Discovery查找设备和服务以及现成的: cxf服务ws-discovery服务jar将注册 将自动发布“Hello”的ServerLifeCycleListener 信息。它还将响应与 它发布的服务 cxf将如何检测设备类型以发送问题匹配响应?如何指定我的设备是ip摄像头(我需要在ProbeMatches response中设置具体的设备类型,例如,NetworkVideoTransmitter)查看CXF源代码(
cxf将如何检测设备类型以发送
问题匹配
响应?如何指定我的设备是ip摄像头(我需要在ProbeMatches response中设置具体的设备类型,例如,NetworkVideoTransmitter
)查看CXF源代码(WSDiscoveryServiceImpl
类)后,我找到了答案:
public ProbeMatchesType handleProbe(ProbeType pt) {
List<HelloType> consider = new LinkedList<HelloType>(registered);
//step one, consider the "types"
//ALL types in the probe must be in the registered type
if (pt.getTypes() != null && !pt.getTypes().isEmpty()) {
ListIterator<HelloType> cit = consider.listIterator();
while (cit.hasNext()) {
HelloType ht = cit.next();
boolean matches = true;
for (QName qn : pt.getTypes()) {
if (!ht.getTypes().contains(qn)) {
matches = false;
}
}
if (!matches) {
cit.remove();
}
}
}
//next, consider the scopes
matchScopes(pt, consider);
if (consider.isEmpty()) {
return null;
}
ProbeMatchesType pmt = new ProbeMatchesType();
for (HelloType ht : consider) {
ProbeMatchType m = new ProbeMatchType();
m.setEndpointReference(ht.getEndpointReference());
m.setScopes(ht.getScopes());
m.setMetadataVersion(ht.getMetadataVersion());
m.getTypes().addAll(ht.getTypes());
m.getXAddrs().addAll(ht.getXAddrs());
pmt.getProbeMatch().add(m);
}
return pmt;
}
public ProbeMatchesType-handleProbe(ProbeType-pt){
列表考虑=新链接列表(注册);
/步骤一,考虑“类型”
//探测器中的所有类型都必须是注册类型
if(pt.getTypes()!=null&!pt.getTypes().isEmpty()){
ListiTror CIT =考虑ListItRealTor();
while(cit.hasNext()){
HelloType ht=cit.next();
布尔匹配=真;
for(QName qn:pt.getTypes()){
如果(!ht.getTypes()包含(qn)){
匹配=假;
}
}
如果(!匹配){
cit.remove();
}
}
}
//下一步,考虑范围
匹配范围(pt,考虑);
if(考虑.isEmpty()){
返回null;
}
ProbeMatchStype pmt=新ProbeMatchStype();
对于(HelloType ht:考虑){
ProbeMatchType m=新的ProbeMatchType();
m、 setEndpointReference(ht.getEndpointReference());
m、 设置示波器(ht.getScopes());
m、 setMetadataVersion(ht.getMetadataVersion());
m、 getTypes().addAll(ht.getTypes());
m、 getXAddrs().addAll(ht.getXAddrs());
pmt.getProbeMatch().add(m);
}
返回pmt;
}
简言之,它迭代已发布的服务并比较QName。如果在published中找到搜索到的qname,它将添加到
ProbeMatch
中。所以我应该使用所需的QName来实现和发布服务以修复它。但是将这些代码放在哪里呢?我应该在什么地方重写这个方法吗?