Regex gSOAP正则表达式验证
我的WSDL中有一个模式限制,定义如下: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
<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;