Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 使用apachecxf进行WS-Discovery。如何指定设备类型?_Web Services_Cxf_Onvif_Ws Discovery - Fatal编程技术网

Web services 使用apachecxf进行WS-Discovery。如何指定设备类型?

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源代码(

我将使用ApacheCXF提供与ONVIF兼容的ip摄像头服务。它使用WS-Discovery查找设备和服务以及现成的:

cxf服务ws-discovery服务jar将注册 将自动发布“Hello”的ServerLifeCycleListener 信息。它还将响应与 它发布的服务


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来实现和发布服务以修复它。

但是将这些代码放在哪里呢?我应该在什么地方重写这个方法吗?