2013-12-12 22 views
6

Tôi đang lên kế hoạch để làm một ứng dụng java onvif. Tôi đã tạo ra một dự án mới và tạo ra các nguồn từ devicemgmt.wsdl.Also tạo ra các lớp từ remote.wsdl từ xa. Làm cách nào để khám phá thiết bị trong mạng bằng các lớp được tạo ra? Cảm ơn bạn đã giúp đỡ.ONVIF - bắt đầu khám phá thiết bị

+0

thể trùng lặp của [WS- Triển khai khám phá cho Java] (http://stackoverflow.com/questions/1946206/ws-discovery-implementations-for-java) – mpromonet

Trả lời

4

devicemgmt.wsdl không liên quan đến quá trình khám phá, quá trình khám phá ONVIF dựa trên http://specs.xmlsoap.org/ws/2005/04/discovery nó sử dụng SOAP trên UDP.

Nếu bạn đang sử dụng apache-CXF, điều này có thể đạt được bằng

org.apache.cxf.ws.discovery.WSDiscoveryClient

Một mẫu mã đơn giản có thể là:

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

Lý do có thể là gì (tôi đang sử dụng cxf) là thiết bị nếu được tìm thấy bởi WSDiscoveryClient(), nhưng không được tìm thấy bởi bất kỳ khách hàng onvif chất lượng sản xuất nào như "SmartICRSS" hoặc ứng dụng android "Onvifier" – 4ntoine

+0

@ 4ntoine nó có thể là phiên bản xà phòng? bạn nên đặt câu hỏi cho một số chi tiết chụp mạng – mpromonet

+0

có lẽ bạn đang đúng. Tôi đã chặn các yêu cầu/phản hồi phát hiện - đọc câu hỏi SO riêng của tôi: http://stackoverflow.com/questions/27191245/how-to-generate-soap-1-2-binding-for-wsdl-using-wsdl2java – 4ntoine

1

Tôi gặp vấn đề tương tự, CXF chỉ đơn giản là lớn, hãy kiểm tra cách tiếp cận của tôi: JavaWsDiscovery tại https://github.com/thhart/javaWsDiscovery.

Nó sử dụng một đầu dò mạng đơn giản như đề xuất theo tiêu chuẩn ONVIF để có thể xác định bất kỳ các thiết bị trong mạng nội bộ của bạn, sau dòng sẽ trở lại cho bạn tất cả các thiết bị có sẵn:

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

Các vấn đề liên quan