Ошибка при использовании soapcpp2 с файлом заголовка ONVIF, созданным с помощью wsdl2h (GSOAP с Linux)

Я пытаюсь реализовать протокол onvif на стороне камеры (сервере) с помощью микроконтроллера, без какой-либо реализации, я пытаюсь использовать файлы wsdl на сайте onvif (например, http://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl) для создания заголовков и файлы реализации.

Итак, я использовал gsoap с командой wsdl2h -c -o devicemgmt.h http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl, и он генерирует мне devicemgmt.h. Затем, когда я делаю soapcpp2 devicemgmt.h, у меня

`devicemgmt.h(12328): syntax error
devicemgmt.h(12327): Syntax error: declaration expected
devicemgmt.h(12330): syntax error
devicemgmt.h(12329): Syntax error: declaration expected
devicemgmt.h(12332): syntax error
devicemgmt.h(12331): Syntax error: declaration expected
devicemgmt.h(12333): syntax error
devicemgmt.h(12339): Syntax error: declaration expected
devicemgmt.h(12342): syntax error
devicemgmt.h(12341): Syntax error: input before ; skipped
devicemgmt.h(12371): syntax error
devicemgmt.h(12370): Syntax error: declaration expected
devicemgmt.h(12373): syntax error
devicemgmt.h(12372): Syntax error: declaration expected
devicemgmt.h(12375): syntax error
devicemgmt.h(12374): Syntax error: declaration expected
devicemgmt.h(12377): syntax error
devicemgmt.h(12376): Syntax error: declaration expected
devicemgmt.h(12415): syntax error
devicemgmt.h(12414): Syntax error: declaration expected
devicemgmt.h(12417): syntax error
devicemgmt.h(12416): Syntax error: declaration expected
Critical error: too many syntactic errors, bailing out`

Вот фрагмент заголовочного файла, в котором возникают ошибки:

 `/// "http://docs.oasis-open.org/wsn/b-2":NotificationMessageHolderType is a complexType.
struct ns4__NotificationMessageHolderType
{
/// Element reference "http://docs.oasis-open.org/wsn/b-2":SubscriptionReference.
///JUST BELOW THATS THE LINE 12328 WHERE THE ERROR IS 
ns1__EndpointReferenceType*          SubscriptionReference          0;  ///< Optional element.
    /// Element reference "http://docs.oasis-open.org/wsn/b-2":Topic.
        struct ns4__TopicExpressionType*     Topic                          0;  ///< Optional element.
    /// Element reference "http://docs.oasis-open.org/wsn/b-2":ProducerReference.
        ns1__EndpointReferenceType*          ProducerReference              0;  ///< Optional element.
        struct _ns4__NotificationMessageHolderType_Message
        {
    /// TODO: <any namespace="##any" minOccurs="1" maxOccurs="1">
    /// TODO: Schema extensibility is user-definable.
    ///       Consult the protocol documentation to change or insert declarations.
    ///       Use wsdl2h option -x to remove this element.
    ///       Use wsdl2h option -d for xsd__anyType DOM (soap_dom_element).
        _XML                                 __any                         0;   ///< Catch any element content in XML string.
        }                                    Message                        1;  ///< Required element.
    };


    /// Top-level root element "http://docs.oasis-open.org/wsn/b-2":NotificationProducerRP

    /// "http://docs.oasis-open.org/wsn/b-2":NotificationProducerRP is a complexType.
    struct _ns4__NotificationProducerRP
    {
    /// Size of the dynamic array of struct ns4__TopicExpressionType* is 0..unbounded
       $int                                  __sizeTopicExpression          0;
    /// Array struct ns4__TopicExpressionType* of length 0..unbounded
        struct ns4__TopicExpressionType*     TopicExpression                0;
    /// Element reference "http://docs.oasis-open.org/wsn/b-2":FixedTopicSet.
        enum xsd__boolean*                   FixedTopicSet                  0;  ///< Optional element.
    /// Size of the dynamic array of xsd__anyURI* is 0..unbounded
       $int                                  __sizeTopicExpressionDialect   0;
    /// Array xsd__anyURI* of length 0..unbounded
        xsd__anyURI*                         TopicExpressionDialect         0;
    /// Element reference "http://docs.oasis-open.org/wsn/t-1":TopicSet.
        struct ns7__TopicSetType*            ns7__TopicSet                  0;  ///< Optional element.
    };


    /// Top-level root element "http://docs.oasis-open.org/wsn/b-2":SubscriptionManagerRP

    /// "http://docs.oasis-open.org/wsn/b-2":SubscriptionManagerRP is a complexType.
    struct _ns4__SubscriptionManagerRP
    {
    /// Element reference "http://docs.oasis-open.org/wsn/b-2":ConsumerReference.
        ns1__EndpointReferenceType           ConsumerReference              1;  ///< Required element.
    /// Element reference "http://docs.oasis-open.org/wsn/b-2":Filter.
        struct ns4__FilterType*              Filter                         0;  ///< Optional element.
    /// Element reference "http://docs.oasis-open.org/wsn/b-2":SubscriptionPolicy.
        struct ns4__SubscriptionPolicyType*  SubscriptionPolicy             0;  ///< Optional element.
    /// Element reference "http://docs.oasis-open.org/wsn/b-2":CreationTime.
        time_t*                              CreationTime                   0;  ///< Optional element.
    };


    /// Top-level root element "http://docs.oasis-open.org/wsn/b-2":Notify

    /// "http://docs.oasis-open.org/wsn/b-2":Notify is a complexType.
    struct _ns4__Notify
    {
    /// Size of the dynamic array of struct ns4__NotificationMessageHolderType* is 1..unbounded
       $int                                  __sizeNotificationMessage      1;
    /// Array struct ns4__NotificationMessageHolderType* of length 1..unbounded
        struct ns4__NotificationMessageHolderType*  NotificationMessage            1;
    /// TODO: <any namespace="##other" minOccurs="0" maxOccurs="unbounded">
    /// TODO: Schema extensibility is user-definable.
    ///       Consult the protocol documentation to change or insert declarations.
    ///       Use wsdl2h option -x to remove this element.
    ///       Use wsdl2h option -d for xsd__anyType DOM (soap_dom_element).
    /// Size of the array of XML or DOM nodes is 0..unbounded
       $int                                  __size                        0;
        _XML                                 __any                         0;   ///< Catch any element content in XML string.
    };


    /// Top-level root element "http://docs.oasis-open.org/wsn/b-2":UseRaw

    /// "http://docs.oasis-open.org/wsn/b-2":UseRaw is a complexType.
    struct _ns4__UseRaw
    {
    };


    /// Top-level root element "http://docs.oasis-open.org/wsn/b-2":Subscribe

    /// "http://docs.oasis-open.org/wsn/b-2":Subscribe is a complexType.
    struct _ns4__Subscribe
    {
    /// Element ConsumerReference of type "http://www.w3.org/2005/08/addressing":EndpointReferenceType.
        ns1__EndpointReferenceType           ConsumerReference              1;  ///< Required element.
    /// Element Filter of type "http://docs.oasis-open.org/wsn/b-2":FilterType.
        struct ns4__FilterType*              Filter                         0;  ///< Optional element. `

Может кто-то помочь мне, пожалуйста ? Я не знаю, что делать, в чем проблема с ns1__EndpointReferenceType и где эта синтаксическая ошибка? что мне добавить в заголовки Onvif, если есть что добавить?


person samyh    schedule 22.06.2016    source источник
comment
Вероятно, проблема с вашим typemap.dat, потому что я успешно выполняю ваши команды. Вы смотрели на FAQ по gSOAP?   -  person mpromonet    schedule 22.06.2016
comment
Привет, я только что заглянул в него и изменил файл typemap.dat, добавив файлы, которых здесь не было, но это всегда безуспешно. Я также пробовал команды, предложенные в FAQ по gSOAP, но они не работают. Вы можете помочь мне понять, почему?   -  person samyh    schedule 23.06.2016
comment
Когда я добавляю команды FAQ, у меня появляется пустой заголовок, он говорит, что не может открыть typemap.dat   -  person samyh    schedule 23.06.2016
comment
Вы использовали старую версию gSOAP? Используя gSOAP 2.8.17r из Ubuntu 15.04, он работает без настройки typemap.dat. Возможно, будет полезно добавить wsdl2h   -  person mpromonet    schedule 23.06.2016


Ответы (1)


Обязательно используйте typemap.dat из дистрибутива gsoap 2.8.x. Этот typemap.dat файл включает привязки ONVIF, а также привязку WS-Addressing wsa5.h для элемента EndpointReference:

#import "wsa5.h"
...
class wsnt__NotificationMessageHolderType
{ public:
  /// Element reference "http://docs.oasis-open.org/wsn/b-2:""http://docs.oasis-open.org/wsn/b-2":SubscriptionReference.
    wsa5__EndpointReferenceType*         SubscriptionReference          0;
person Dr. Alex RE    schedule 03.07.2016