gSOAP и общая проблема SOAP - PullRequest
       49

gSOAP и общая проблема SOAP

2 голосов
/ 01 марта 2011

Я использую gSOAP для создания кода C ++ из документа WSDL. Проблема в том, что gSOAP выдает мне ошибки, когда я запускаю утилиту wsdl2h в моем файле WSDL. Все ошибки связаны с проблемами пространства имен. Например

Warning: could not find element 'GetRPCMethods' type '"http://www.broadband-forum.org/cwmp/cwmp-1-2.xsd":GetRPCMethods' in schema urn:tr069

Я вставил определения пространств имен и пример их использования ниже. Кто-нибудь знает, где я иду не так?

urn: tr069 должен ссылаться на текущий документ.

<s0:definitions 
    name="tr069"
    xmlns:s0="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:s1="urn:tr069"
    xmlns:s2="http://schemas.xmlsoap.org/wsdl/soap/"
    targetNamespace="urn:tr069">

<s0:types>

<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:tns="urn:tr069" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd1="http://www.broadband-forum.org/cwmp/cwmp-1-2.xsd"
    targetNamespace="urn:tr069">

  <xsd:import namespace="urn:dslforum-org:cwmp-1-2" schemaLocation="cwmp-1-2.xsd" />
  <xsd:element name="GetRPCMethods" type="xsd1:GetRPCMethods" />
</xsd:schema>
</s0:types>
<s0:message name="GetRPCMethods">
     <s0:part element="s1:GetRPCMethods" name="GetRPCMethods" />
</s0:message>
</s0:definitions>

У меня есть еще несколько вопросов, так как я понимаю, что целевое пространство имен не обязательно должно указывать на реальное местоположение, это просто соглашение для указания на текущий документ. Это правильно? Также в cwmp-1-2.xsd есть элемент с именем GetRPCMethods, который содержит последовательность, содержащую другой элемент. Рекомендуется ли использовать весь этот элемент (GetRPCMethods) в качестве части для сообщения, как описано выше, или я должен определить конкретные части GetRPCMethods в сообщении?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 02 марта 2011

Проблема заключалась в элементах, определенных в теге <schema>.Сначала я удалил все определенные элементы внутри тега <schema>, потому что они все равно были совершенно ненужными.Затем я изменил пространство имен элементов в частях сообщения с s1 на xsd1, чтобы использовать элементы в cwmp-1-2.xsd вместо тех, которые я определил в теге <schema>.

Что касается моегопо другим вопросам, targetNameSpace не обязательно должен указывать на реальный URI, это просто имя для пространства имен этого документа.Что касается моего второго вопроса, я думаю, что лучше и проще всего использовать элемент схемы целиком в качестве части сообщения.

0 голосов
/ 01 марта 2011

В сообщении об ошибке говорится, что не так, у вас нет определения xsd1: GetRPCMethods, это где-то определено? s1: ищется GetRPCMethods -> найдено s1: urn: trn069 -> urn: trn069 не является уникальным, что может быть проблемой -> urn: trn69 определяет элемент, GetRPCMethods имеет тип xsd1: GetRPCMethods -> этот тип не найден.

Я не уверен, допустимо ли использовать тот же URI для targetNamespace. Может быть, это вызывает дополнительные проблемы.

0 голосов
/ 01 марта 2011

замечаю, что

<xsd:schema>

не имеет закрывающего тега? Является ли wsdl правильно сформированным XML-документом?

Targetnamespace - это пространство имен экземпляра документа, т. Е. Пространство для SOAP: Envelope. * * 1010

...