gsoap类生成问题

时间:2009-08-19 17:29:32

标签: xml wsdl gsoap

我正在尝试为JIRA问题跟踪系统WSDL生成gsoap类。我运行这些命令来生成所需的类:

$ wsdl2h -o JIRASoap.h <url to wsdl>
$ soapcpp2 -C JIRASoap.h

soapcpp2命令提供以下输出,但不指示如何修复它。

There were errors:
3 syntax errors
1 semantic error
2 warnings

这些是(大部分)错误:

JIRASoap.h(935): syntax error
JIRASoap.h(934): Syntax error: input before ; skipped
JIRASoap.h(940): syntax error
JIRASoap.h(939): Syntax error: input before ; skipped

JIRASoap.h(942): **ERROR**: Duplicate declaration of __size (already declarared at line 937)

JIRASoap.h(947): syntax error
JIRASoap.h(946): Syntax error: input before ; skipped

以下是JIRASoap.h的相关部分(第928-947行):

/// SOAP encoded array of xs:byte[]
class ArrayOf_USCORExsd_USCOREbase64Binary
{ public:
/// SOAP encoded array of xs:byte
class 
{ public:
/// Pointer to array of xsd__byte.
    xsd__byte                           *__ptr                         ;
/// Size of the dynamic array.
    int                                  __size                        ;
/// Offset for partially transmitted arrays (uncomment only when required).
//  int                                  __offset                      ;
    }                                   *__ptr                         ;
/// Size of the dynamic array.
    int                                  __size                        ;
/// Offset for partially transmitted arrays (uncomment only when required).
//  int                                  __offset                      ;
/// A handle to the soap struct that manages this instance (automatically set)
    struct soap                         *soap                          ;
};

当我尝试编译程序时,我收到此错误:

soapStub.h:2799:错误:ISO C ++禁止声明'ArrayOf_USCORExsd_USCOREbase64Binary'没有类型

以下是WSDL的相关部分:

<complexType name="ArrayOf_xsd_base64Binary">
  <complexContent>
    <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:byte[][]"/>
    </restriction>
  </complexContent>
</complexType>

据我所知,大多数类型都是在soapStub.h中定义的,但是ArrayOf_USCORExsd_USCOREbase64Binary不是。

当我生成仅C文件时,我得到“struct / *?* /”而不是“ArrayOf_USCORExsd_USCOREbase64Binary”。

1 个答案:

答案 0 :(得分:0)

我设法通过从JIRASoap.h中删除对ArrayOf_USCORExsd_USCOREbase64Binary的所有引用来获取编译代码,包括类本身和ns4_addAttachmentsToIssue方法(它将指向ArrayOf_USCORExsd_USCOREbase64Binary的指针作为参数)。

如果您在不删除ns4_addAttachmentsToIssue的情况下找到解决上述错误的方法,请告知我们。