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

时间:2017-04-27 12:53:30

标签: java web-services onvif

为了使用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版本的方法,因此我将能够收到事件响应。

感谢。

1 个答案:

答案 0 :(得分:0)

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