繁体   English   中英

如何使用Java ONVIF Web服务从摄像机中提取ONVIF事件

[英]How to pull an ONVIF event from a camera using Java ONVIF web services

为了使用ONVIF从Axis相机中提取事件,我创建了以下内容:

CreatePullPointSubscriptionResponse pullPointSubscriptionResponse = event.createPullPointSubscription(parameters);
PullPointSubscription pullPointSubscription = pullPointSubscriptionResponse.getSubscriptionReference().getPort(PullPointSubscription.class);
PullMessages pullMessagesParameters = new PullMessages();
pullMessagesParameters.setMessageLimit(1);
javax.xml.datatype.Duration duration = DatatypeFactory.createDuration("PT1M");
pullMessagesParameters.setTimeout(duration);
try {

    PullMessagesResponse pullMessageResponse =
        pullPointSubscription.pullMessages(pullMessagesParameters);
} catch (PullMessagesFaultResponse_Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
int d = 1;
catch(TopicNotSupportedFault | TopicExpressionDialectUnknownFault | InvalidTopicExpressionFault
    | InvalidMessageContentExpressionFault | InvalidProducerPropertiesExpressionFault
    | UnacceptableInitialTerminationTimeFault | NotifyMessageNotSupportedFault | ResourceUnknownFault
    | UnsupportedPolicyRequestFault | InvalidFilterFault | SubscribeCreationFailedFault
    | UnrecognizedPolicyRequestFault e)

{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我的问题是,当执行pullMessages时,使用SOAP1.1创建Web服务,而摄像头需要SOAP1.2(我得到版本不匹配错误响应)。

createPullPointSubscription创建了一个很好的版本Web服务,因为我创建的是使用JaxWsProxyFactoryBean并且我自己设置了绑定。 我无法以相同的方式创建拉消息WS,因为我没有封装到pullPointSubscription对象中的引用点(并且它们是私有的)。

我正在寻找一种方法让PullPointSubscription知道当前的SOAP版本,所以我将能够收到事件响应。

我在一个变通方法中解决了这个问题。 我使用.toString()从响应中提取私有参数,解析字符串,提取参数,并使用正确的版本和参数创建一个新的PullPointSubscription对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM