2013-12-12 94 views
6

我打算做一個java onvif應用程序。我創建了一個新項目,並從devicemgmt.wsdl生成了源代碼,並從遠程discovery.wsdl生成了這些類。 如何使用這些生成的類在網絡中發現設備? 感謝您的幫助。ONVIF - 設備發現的開始

+0

可能重複[WS-發現實現爲Java](http://stackoverflow.com/questions/1946206/ws-discovery-implementations-for-java) – mpromonet

回答

4

devicemgmt.wsdl與發現過程無關,ONVIF發現過程基於http://specs.xmlsoap.org/ws/2005/04/discovery它使用基於UDP的SOAP。

如果您正在使用Apache的CXF,這可能是使用實現

org.apache.cxf.ws.discovery.WSDiscoveryClient

一個簡單的示例代碼可能是:

import java.util.List; 
import javax.xml.ws.EndpointReference; 
import org.apache.cxf.ws.discovery.WSDiscoveryClient; 

public class Main 
{ 
    public static void main(String[] args) 
    { 
     WSDiscoveryClient client = new WSDiscoveryClient(); 
     client.setVersion10(); // use WS-discovery 1.0 
     client.setDefaultProbeTimeout(1000); // timeout 1s 

     System.out.println("Probe:" + client.getAddress()); 
     List<EndpointReference> references = client.probe(); 

     System.out.println("Nb answsers:" + references.size()); 
     for (EndpointReference ref : references) 
     { 
      System.out.println(ref.toString()); 
     } 
    } 
} 
+0

什麼可以是原因(我使用cxf)是設備,如果WSDiscoveryClient()發現,但沒有找到像「SmartICRSS」或「Onvifier」的任何生產質量onvif客戶端Android應用程序 – 4ntoine

+0

@ 4ntoine它可能是肥皂版本?你應該問一個問題,給出一些網絡捕獲細節 – mpromonet

+0

你可能是對的。我攔截了發現請求/響應 - 閱讀我單獨的SO問題:http://stackoverflow.com/questions/27191245/how-to-generate-soap-1-2-binding-for-wsdl-using-wsdl2java – 4ntoine

1

我有同樣的問題,CXF只是大,請檢查我的方法:JavaWsDiscovery https://github.com/thhart/javaWsDiscovery

它使用一個簡單的網絡探針通過ONVIF標準建議能夠識別你的本地網絡上的任何設備,下面一行將返回所有可用設備:中

final Collection urls = DeviceDiscovery.discoverWsDevicesAsUrls("^http$", ".onvif.");