2015-03-03 2 views
1

Я пытаюсь использовать элемент redefine в моем xsd. Я пробовал разные комбинации, но, похоже, не решил эту ошибку. Ошибка появляется, когда я пытаюсь загрузить WSDL, включая переопределенную схему, в интерфейс SOAP. Кроме того, он не отображается в дизайне для xsd в eclipse.redefine xsd element throws «неправильно сформированная» ошибка

WSDL -> Импорт TestService.xsd -> Импорт CreateTest.xsd -> Содержит определение CreateTestRequestType.

Когда я загружаю это в свой SOAPUI, все выглядит хорошо и без ошибок.

Теперь я пытаюсь переопределить тип CreateTestRequestType в другой XSD называется CreateRedefineTest.xsd и импортировать XSD в TestService.xsd (Оператор импорта comemented, но я обязательно только раскомментировать этот импорт и прокомментировать другой для тестирования). Но когда я загрузить WSDL в SOAP UI, я получаю ошибку ниже:

Source: null Error: URL "CreateTest.xsd" is not well-formed 

EDIT1: Я могу устранить эту ошибку, давая абсолютный путь. Можно ли заставить его работать с относительным путем?

EDIT2 Я смотрел на w3 статью об этом элементе и пример действительно использует относительный путь. Но я попытался реплицировать, но он все еще не работает. Пример можно найти на этом location.

Я думаю, что у меня отсутствует какое-то правило, но я пробовал несколько вещей и, похоже, не в состоянии разрешить это.

Ниже приведен исходный код для WSDL и XSD.

WSDL:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
 
<wsdl:definitions 
 
\t xmlns:test="http://test.com/TESTServices/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
 
\t xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 
\t xmlns:tes="http://test.com/TestService/Test/" 
 
\t name="TestService" 
 
\t targetNamespace="http://test.com/TESTServices/"> 
 

 
\t <wsdl:types> 
 
\t \t <xsd:schema targetNamespace="http://test.com/TestService/Test/"> 
 
\t \t \t <xsd:include schemaLocation="TestService.xsd" /> 
 
\t \t </xsd:schema> 
 
\t </wsdl:types> 
 
\t 
 
\t <!-- Create Test --> 
 
\t <wsdl:message name="CreateTestRequest"> 
 
\t \t <wsdl:part element="tes:CreateTestRequest" name="parameters" /> 
 
\t </wsdl:message> 
 
\t <wsdl:message name="CreateTestResponse"> 
 
\t \t <wsdl:part element="tes:CreateTestResponse" name="parameters" /> 
 
\t </wsdl:message> 
 

 
\t <wsdl:message name="TESTHeader"> 
 
\t \t <wsdl:part name="request_header" element="tes:testHeader"/> 
 
\t </wsdl:message> 
 

 
\t <wsdl:message name="TestFault"> 
 
\t \t <wsdl:part name="testFault" element="tes:testFault"></wsdl:part> 
 
\t </wsdl:message> 
 

 

 
\t <wsdl:portType name="TestServices_v4_0"> 
 
\t \t <!-- Create Party --> 
 
\t \t <wsdl:operation name="CreateTest"> 
 
\t \t \t <wsdl:input message="test:CreateTestRequest" /> 
 
\t \t \t <wsdl:output message="test:CreateTestResponse" /> 
 
\t \t \t <wsdl:fault name="fault" message="test:TestFault"></wsdl:fault> 
 
\t \t </wsdl:operation> 
 
\t </wsdl:portType> 
 

 
\t <wsdl:binding name="TestServicesSOAP_v4_0" type="test:TestServices_v4_0"> 
 
\t \t <soap:binding style="document" 
 
\t \t \t transport="http://schemas.xmlsoap.org/soap/http" /> 
 
\t \t 
 
\t \t <!-- Create Party --> 
 
\t \t <wsdl:operation name="CreateTest"> 
 
\t \t \t <soap:operation soapAction="http://firstniagara.com/PartyService/CreateTest" /> 
 
\t \t \t <wsdl:input> 
 
\t \t \t \t <soap:header message="test:TESTHeader" part="request_header" 
 
\t \t \t \t \t use="literal" /> 
 
\t \t \t \t <soap:body use="literal" /> 
 
\t \t \t </wsdl:input> 
 
\t \t \t <wsdl:output> 
 
\t \t \t \t <soap:header message="test:TESTHeader" part="request_header" 
 
\t \t \t \t \t use="literal" /> 
 
\t \t \t \t <soap:body use="literal" /> 
 
\t \t \t \t 
 
\t \t \t </wsdl:output> 
 
\t \t \t <wsdl:fault name="fault"> 
 
\t \t \t \t <soap:fault name="fault" use="literal" /> 
 
\t \t \t </wsdl:fault> 
 
\t \t </wsdl:operation> 
 
\t </wsdl:binding> 
 

 
\t <wsdl:service name="TestServices_v4_0"> 
 
\t \t <wsdl:port binding="test:TestServicesSOAP_v4_0" name="TestServicesSOAP"> 
 
\t \t \t <soap:address location="http://localhost/TEST/ESB" /> 
 
\t \t </wsdl:port> 
 
\t </wsdl:service> 
 
</wsdl:definitions>

Это WSDL Импорт TestService.xsd, который содержит код ниже:

<?xml version="1.0" encoding="UTF-8"?> 
 
<xsd:schema 
 
\t xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
 
\t xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 
\t xmlns:ct="http://test.com/TestService/CreateTest/" 
 
\t targetNamespace="http://test.com/TestService/Test/" 
 
\t elementFormDefault="qualified"> 
 

 
\t <xsd:import namespace="http://test.com/TestService/CreateTest/" schemaLocation="CreateTest.xsd" /> 
 

 
<!-- \t <xsd:import namespace="http://test.com/TestService/CreateTest/" schemaLocation="CreateRedefineTest.xsd" /> --> 
 
\t 
 
\t <!-- CreateParty --> 
 
\t <xsd:element name="CreateTestRequest" type="ct:CreateTestRequestType" /> 
 
\t <xsd:element name="CreateTestResponse" type="ct:CreateTestResponseType" /> 
 

 
\t <xsd:element name="testHeader" type="xsd:string" /> 
 
\t <xsd:element name="testFault" type="xsd:string" /> 
 
\t 
 
\t 
 
\t 
 
</xsd:schema>

TestService.xsd содержит CreateTest.xsd, который содержит код, приведенный ниже, и имеет тип CreateTestRequestType определено:

<xsd:schema 
 
\t xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
 
\t xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 
\t targetNamespace="http://test.com/TestService/CreateTest/" 
 
\t elementFormDefault="qualified"> 
 
\t 
 

 
\t <!-- Create Test--> 
 
\t <xsd:complexType name="CreateTestRequestType"> 
 
\t \t <xsd:sequence> 
 
\t \t \t <xsd:element name="RequestId" type="xsd:string" minOccurs="1"/> 
 
\t \t \t <xsd:element name="TestRecord" type="xsd:string" minOccurs="1" /> 
 
\t \t </xsd:sequence> 
 
\t </xsd:complexType> 
 
\t <xsd:complexType name="CreateTestResponseType"> 
 
\t \t <xsd:sequence> 
 
\t \t \t <xsd:element name="RequestId" type="xsd:string" minOccurs="1"/> 
 
\t \t \t <xsd:element name="Messages" type="xsd:string" minOccurs="0"/> 
 
\t \t \t <xsd:element name="TestIdentifier" type="xsd:string" minOccurs="0"/> \t \t \t 
 
\t \t </xsd:sequence> 
 
\t </xsd:complexType> 
 
\t 
 
</xsd:schema>

Попытка переопределить CreateTestRequ estType в CreateRedefineTest.XSD, как показано ниже:

<xsd:schema 
 
\t xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
 
\t xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 
\t xmlns:cp="http://test.com/TestService/CreateTest/" 
 
\t targetNamespace="http://test.com/TestService/CreateTest/" 
 
\t elementFormDefault="qualified"> 
 
\t 
 
    <xsd:redefine schemaLocation="CreateTest.xsd"> 
 
    <xsd:complexType name="CreateTestRequestType"> 
 
    <xsd:complexContent> 
 
     <xsd:extension base="cp:CreateTestRequestType"> 
 
     <xsd:sequence> 
 
      <xsd:element name="country" type="xsd:string"/> 
 
     </xsd:sequence> 
 
     </xsd:extension> 
 
    </xsd:complexContent> 
 
    </xsd:complexType> 
 
</xsd:redefine> \t 
 

 
</xsd:schema>

+1

Я не знаю, есть ли какая-либо ошибка в XMLBeans (это среда, которую SOAPUI использует для загрузки WSDL и xsds) с ''. Дело в том, что если я использую абсолютный путь для 'schemaLocation' в' xs: redefine', используя следующий файл примечания: /// C:/Path_to_xsd', кажется, что неважно, что WSDL загружается. Однако тогда, когда я создаю запрос и вручную добавляю новый элемент '', и я проверяю запрос с помощью SOAPUI, он говорит, что элемент не разрешен. Таким образом, полный путь wsdl загружается без ошибок, но загружается неправильно ... надеюсь, вам повезет найти решение. – albciff

+0

@albciff, Спасибо, что посмотрели на это и попытались. Я попытался использовать абсолютный путь, и он работает и загружается с ожидаемыми элементами и проверяет ОК. Я использовал «/» вместо «\», и ​​он работал нормально. Теперь мне нужно выяснить, как заставить его работать, используя относительный путь. Большое спасибо за это! – mandy

+0

здорово, что мой комментарий поможет вам: – albciff

ответ

1

SoapUI - отличный инструмент, который помог мне преодолеть и будет продолжать помогать мне в будущем в отличных отношениях.

Я думаю, что это одна из функций, которые, по-видимому, многие пользователи не используют и, похоже, являются ошибкой в ​​SoapUI 5.0.0. Я попробовал то же самое в нескольких более старых версиях SoapUI и получил тот же результат. Я также попробовал это в пробной версии SOAP UI NG Pro 1.2.2.

Я тогда пробовал это в XMLSpy, и он работал без каких-либо ошибок, точно таких же xsd без изменений. (Примечание: TestService.xsd требуется прокомментированный оператор импорта для Redefined.xsd)

Я также обнаружил, что была обнаружена ошибка, но не нашли разрешения или комментариев относительно разрешения. Если кто-то захочет ссылки на эти ошибки, location. Вы можете найти ошибки 651, 586 и 539, которые связаны, если хотите.

Надеюсь, в какой-то момент эта ошибка исправлена ​​в SoapUI. Я также создал новую ошибку, чтобы ссылаться на эти старые ошибки и консолидировать: SourceForge 671

И надеюсь, что это сообщение сохраняет время других, если они сталкиваются с той же проблемой.

Спасибо всем, кто смотрел этот пост.

0

Это, вероятно, из-за вашего парсер не в состоянии найти документ схемы для «ф: http://test.com/TestService/CreateTest/». Это происходит, если вы используете абсолютный URL-адрес для cp xsd или используете XML-каталог?

1

Я хочу подтвердить, что при попытке использовать элемент xsd: redefine в моем сообщении, установленном с версией 5.0.0 интерфейса SOAP, я получаю ту же самую ошибку.

В принципе, мне необходимо расширить определение сообщения другого набора сообщений, определенного службой открытых геопространственных групп, - и использовать переопределенную схему в определении запроса и ответа моего WSDL.

В дополнение к «не очень хорошо сформированным» ошибка, я получаю:

'Source: null Error: type '[email protected]://www.opengis.net/wfs' not found.'

Eclipse, не имеют проблем с проверкой WSDL, и я могу импортировать его в Rational Tester Service (V8.5.0.2) без проблем.

Смежные вопросы