gsoap을 사용하여 ONVIF 서버 (nvt) 장치를 구현하려고합니다. 코드 생성을 위해 gsoap's website에 제공된 지침과 typemap.dat를 따르고 있습니다. wsdl2h에는 "-P"와 "-x"매개 변수를 사용하고 soapcpp2에는 "-S -i -x -w"매개 변수를 사용합니다. 모든 것이 예상대로 작동하지만 약간의 기이가 있습니다.gSOAP 및 ONVIF NVT 네임 스페이스/태그 문제
ONVIF 핵심 사양은 "서비스"구현의 응답에 선택적 "기능"구성원을 포함하는 GetServices() 작업을 정의합니다. 옵션 회원이 wsdl2h에 의해 생성되지 않기 때문에 (때문에 내 매개 변수 같아요), 내 타입 맵 파일에 다음 수정합니다
_tds__Service_Capabilities = $ xsd__anyType * Capabilities;
<tds:Service>
<tds:Capabilities>
<tds:Capabilities>
</tds:Capabilities>
</tds:Capabilities>
</tds:Service>
<tds:Service>
<tds:Capabilities>
<trt:Capabilities>
...
</trt:Capabilities>
</tds:Capabilities>
</tds:Service>
<tds:Service>
<tds:Capabilities>
<tev:Capabilities>
...
</tev:Capabilities>
</tds:Capabilities>
</tds:Service>
:
<tds:Service>
<tds:Capabilities>
<tds:Capabilities>
</tds:Capabilities>
</tds:Capabilities>
</tds:Service>
<tds:Service>
<tds:Capabilities>
<tds:Capabilities>
...
</tds:Capabilities>
</tds:Capabilities>
</tds:Service>
<tds:Service>
<tds:Capabilities>
<tds:Capabilities>
...
</tds:Capabilities>
</tds:Capabilities>
</tds:Service>
이 특질을 극복하기 위해, 내가 만든 soapC.cpp 파일에 추한 패치, 다음이 적용됩니다 예를 들어 여기에 예상되는 응답 (간체)이다
@@ -42068,7 +51777,7 @@ void tev__Capabilities::soap_serialize(struct soap *soap) const
int tev__Capabilities::soap_out(struct soap *soap, const char *tag, int id, const char *type) const
{
- return soap_out_tev__Capabilities(soap, "tev:Capabilities", id, this, type);
+ return soap_out_tev__Capabilities(soap, tag, id, this, type);
}
SOAP_FMAC3 int SOAP_FMAC4 soap_out_tev__Capabilities(struct soap *soap, const char *tag, int id, const tev__Capabilities *a, const char *type)
@@ -64741,7 +74450,7 @@ void trt__Capabilities::soap_serialize(struct soap *soap) const
int trt__Capabilities::soap_out(struct soap *soap, const char *tag, int id, const char *type) const
{
- return soap_out_trt__Capabilities(soap, "trt:Capabilities", id, this, type);
+ return soap_out_trt__Capabilities(soap, tag, id, this, type);
}
파일을 다시 생성 할 때마다이 패치를 적용해야하며, 향후 이것이 일부 호환성 문제를 야기 할 수 있다는 심각한 우려가 있습니다. 네임 스페이스 태그를 재정의하는 올바른 방법은 무엇입니까?