I는 다음과 같이 정의 내 WSDL의 패턴 제한이 있습니다gSOAP 정규식 유효성 검사
<complexType name="xxxXXX">
<attribute name="state" use="optional">
<simpleType>
<restriction base="xs:string">
<pattern value="((\-1)|[0-5])(;((\-1)|[0-5]))*"/>
</restriction>
</simpleType>
</attribute>
</complexType>
을하지만 상태와 요청을 수행 할 때 = ""gSOAP은 그것을 받아들입니다. 내가 함수 fsvalidate
(여기 https://www.genivia.com/doc/databinding/html/)을 정의해야한다는 것을 알았지 만, 호출 된 적이없는 것 같습니다 (중단 점을 트리거하지 않음).
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 ;
};
어쩌면 내가 생성을위한 몇 가지 옵션을보고 싶어하지만 난 wsdl2h에 anythink를 찾지 못했습니다 (https://linux.die.net/man/1/wsdl2h : Futhermore, 생성 된 gsoap의 코드는이 도구 wsdl2h가 발생하더라도 정규 표현식을 포함하지 않는)도 soapcpp2
추가 정보 :
나는 gSOAP의에서 fsvalidate 검색 코드를 생성 내가 발견
#ifndef WITH_LEANER
if (pattern && soap->fsvalidate && (soap->error = soap->fsvalidate(soap, pattern, s)))
return NULL;
#endif
그러나 NULL 패턴으로 항상 호출 된 것 같습니다. (!(t = soap_string_in(soap, 1, 0, -1, NULL)))
.
참고 : gSOAP 2.8.23을 사용하고 있습니다.
- 편집 :
나는이 같은 복합 타입의 유형 추출하는 알렉스의 충고 @ 다음 :
<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>
을 그리고 wsdl2h 뭔가 좋은 생성하는 것 같다
/// Content pattern is "((\\-1)|[0-5])(;((\\-1)|[0-5]))*".
typedef std::string ns1__stateType "((\\-1)|[0-5])(;((\\-1)|[0-5]))*";
class ns1__xxxXXX
{ public:
/// Attribute "state" of XSD type "http://new.webservice.namespace":stateType.
@ns1__stateType* state 0;
을
하지만 gsoap에서 생성되는 최종 유형은 std :: string입니다.
class SOAP_CMAC ns1__xxxXXX
{
public:
std::string *state;
물론 정규식의 유효성을 검사하지 않습니다.
에게 보내 주시면 감사하겠습니다. 추가 정보는 편집을 참조하십시오. – VSA
내 gsoap 버전을 2.8.44로 업데이트했고 이제는 작동합니다. – VSA