Как запустить генератор кода gSOAP без подключения к интернету?

Я пытаюсь сгенерировать код с помощью wsdl2h / soap2cpp для WSDL медиа-файлов onvif http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl. У этого wsdl есть некоторые зависимости.

Чтение FAQ по gSOAP http://www.cs.fsu.edu/~engelen/soapfaq.html, Я, наконец, извлекать необходимые пространства имен в следующем typemap.dat

trt = "http://www.onvif.org/ver10/media/wsdl"tt  = "http://www.onvif.org/ver10/schema"wsnt    = "http://docs.oasis-open.org/wsn/b-2"wsrfbf  = "http://docs.oasis-open.org/wsrf/bf-2"wstop   = "http://docs.oasis-open.org/wsn/t-1"xop="http://www.w3.org/2004/08/xop/include"wsa5    = <http://www.w3.org/2005/08/addressing>

При таком отображении генератор кода gSOAP работает правильно:

wsdl2h media.wsdl
soapcpp2 -2ix media.h -I /usr/share/gsoap/import

Но для этого нужно иметь подключение к интернету. Я хотел бы построить с файлами, которые хранятся локально.

В справке wsdl2h есть интересная опция:

-я не импортирую (расширенный вариант)

Поэтому я загружаю то, что было загружено с помощью wsdl2h:

  1. http://www.onvif.org/onvif/ver10/schema/onvif.xsd
  2. http://docs.oasis-open.org/wsn/b-2.xsd
  3. http://www.w3.org/2004/08/xop/include
  4. http://docs.oasis-open.org/wsrf/bf-2.xsd
  5. http://docs.oasis-open.org/wsn/t-1.xsd

И следующий запуск

wsdl2h -im media.wsdl onvif.xsd b-2.xsd include bf-2.xsd t-1.xsd
soapcpp2 -2ix media.h -I /usr/share/gsoap/import

Но это терпит неудачу с такого рода выводом:

**  The gSOAP code generator for C and C++, soapcpp2 release 2.8.7
**  Copyright (C) 2000-2011, Robert van Engelen, Genivia Inc.
**  All Rights Reserved. This product is provided "as is", without any warranty.
**  The soapcpp2 tool is released under one of the following two licenses:
**  GPL or the commercial license by Genivia Inc.

media.h(164): syntax error
media.h(163): Syntax error: declaration expected
media.h(173): syntax error
...

В media.h ссылочная структура кода пришла от ws-адресации. Затем я попробовал разные вещи, импортируя больше xsd, но я не нашел способа устранить отсутствующие зависимости.
Возможно, это неправильный способ сборки из локального файла. Во всяком случае, я хотел бы избегайте любых изменений в wsdls и xsd файлы. Альтернативой может быть каталог для сопоставления удаленного URL с локальным (например, Apache CXF), но я не нашел ничего подобного в документации по gSOAP.

Спасибо, что поделились своим опытом.

0

Решение

Я нашел только частичную документацию формата typemap.dat с сайта gSOAP http://www.cs.fsu.edu/~engelen/soapdoc2.html. Однако я заметил, что некоторые определения пространства имен используют <url> вместо "url",
После некоторых попыток это дает решение проблемы, определяя пространство имен, заключенное внутри <>.

Поэтому я изменил typemap.dat следующим образом:

trt=<http://www.onvif.org/ver10/media/wsdl>
tt=<http://www.onvif.org/ver10/schema>
wsnt=<http://docs.oasis-open.org/wsn/b-2>
wsrfbf=<http://docs.oasis-open.org/wsrf/bf-2>
wstop=<http://docs.oasis-open.org/wsn/t-1>
xop=<http://www.w3.org/2004/08/xop/include>
wsa5=<http://www.w3.org/2005/08/addressing>

Затем можно сгенерировать код из media.wsdl без подключения к интернету:

wsdl2h media.wsdl onvif.xsd b-2.xsd include bf-2.xsd t-1.xsd
soapcpp2 -2ix media.h -I /usr/share/gsoap/import
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]