2017-04-27 1 views
1

Pour tirer des événements de la caméra Axis à l'aide ONVIF, j'ai créé les éléments suivants: Comment tirer un événement ONVIF d'une caméra à l'aide des services Web Java ONVIF

 
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(); }

Mon problème est que lorsque pullMessages est exécuté, le service Web est créé avec SOAP1.1, tandis que la caméra attend SOAP1.2 (j'obtiens une réponse d'erreur de non-concordance de version). Le createPullPointSubscription crée un service web de bonne version, puisque j'ai créé avec JaxWsProxyFactoryBean et j'ai moi-même défini la liaison. Je ne peux pas créer les messages pull de la même manière, car je n'ai pas les points de référence qui sont encapsulés dans l'objet pullPointSubscription (et ils sont privés).

Je suis à la recherche d'un moyen de permettre à PullPointSubscription de connaître la version SOAP actuelle, afin que je puisse recevoir la réponse à l'événement.

Merci.

Répondre

0

J'ai résolu ce problème avec un peu de solution de contournement. J'ai extrait les paramètres privés de la réponse en utilisant .toString(), analysé la chaîne, extrait les paramètres et créé un nouvel objet PullPointSubscription avec la bonne version et les bons paramètres.