Regex gSOAP正则表达式验证

Regex gSOAP正则表达式验证,regex,validation,c++11,gsoap,Regex,Validation,C++11,Gsoap,我的WSDL中有一个模式限制,定义如下: <xs:simpleType name="stateType"> <xs:restriction base="xs:string"> <xs:pattern value="((\-1)|[0-5])(;((\-1)|[0-5]))*"/> </xs:restriction> </xs:simpleType> <complexType name="xxxXXX

我的WSDL中有一个模式限制,定义如下:

<xs:simpleType name="stateType">
    <xs:restriction base="xs:string">
        <xs:pattern value="((\-1)|[0-5])(;((\-1)|[0-5]))*"/>
    </xs:restriction>
</xs:simpleType>
<complexType name="xxxXXX">
    <attribute name="state" type="tns:stateType" use="optional" />
</complexType>

)但它似乎从未被调用(不会触发断点)。
此外,生成的gsoap代码不包含正则表达式,即使工具wsdl2h生成:

class ns1__xxxXXX
{ public:
@/// Content pattern is "((\\-1)|[0-5])(;((\\-1)|[0-5]))*".
    std::string                                                        
                                        *state                          0;  ///< Optional attribute.
/// A handle to the soap struct that manages this instance (automatically set).
    struct soap                         *soap                          ;
};
但是,它似乎总是使用空模式调用<代码>(!(t=soap\u string\u in(soap,1,0,-1,NULL))

注意:我使用的是GSOAP2.8.23

--编辑:

我按照@Alex的建议从complexType中提取类型,如下所示:

<xs:simpleType name="stateType">
    <xs:restriction base="xs:string">
        <xs:pattern value="((\-1)|[0-5])(;((\-1)|[0-5]))*"/>
    </xs:restriction>
</xs:simpleType>
<complexType name="xxxXXX">
    <attribute name="state" type="tns:stateType" use="optional" />
</complexType>
但gsoap生成的最后一个类型是std::string:

class SOAP_CMAC ns1__xxxXXX
{
public:
    std::string *state;

当然,它不会验证正则表达式。

似乎忽略了本地正则表达式模式(即类的本地模式),但非本地模式可以正常工作。要强制模式验证,必须从complexType中提取模式(从类中提取):

然后设置fsvalidate()回调以根据模式检查字符串内容


这是一个恼人的限制。我建议向

提交错误/功能请求感谢您的回答,更多信息请参见我的编辑。我将gsoap的版本更新为2.8.44,现在可以使用了。
class SOAP_CMAC ns1__xxxXXX
{
public:
    std::string *state;
typedef std::string ns1__xxxXXX_string "((\\-1)|[0-5])(;((\\-1)|[0-5]))*";

class ns1__xxxXXX
{ public:
  ns1__xxxXXX_string *state;