Я получил файл WSDL, который определяет две схемы для того же пространства имен, как это:Как ссылаться на схему, определенную в том же файле WSDL?
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://example.com/payments"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://example.com/payments">
<xsd:complexType name="TestType">
<xsd:sequence>
<xsd:element name="Version" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://example.com/payments"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://example.com/payments">
<xsd:element name="TestRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header" type="TestType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
достаточно уверен TestType
не может ссылаться из TestRequest
. Я нашел несколько answers, которые показывают, как вы это сделаете для разных файлов через xsd:include
(поскольку я использую тот же targetNamespace
), но я не понимаю, как включить schemaLocation
?
Обратите внимание, что не то, что я должен делать, это не вопрос. I знаю проблема исчезает, если я перехожу к определениям элементов в одно и то же определение схемы.
На самом деле, решение с XPointer обычно использует URIResolver для использования процессором XSD. Процессор XSD может не поддерживать XPointer, но в URIResolver вы можете сделать это любым способом (при условии, что ваша система позволяет вам добавлять URIResolver, и у вас есть доступ к реализации XPointer). – Abel
Так что вы говорите, что CXF (который используется здесь) должен уметь понимать схему? – mabi
@mabi, да, он должен. Если это не так, просто отредактируйте его и перейдите - если у вас нет времени исправить это самостоятельно, так как код является открытым исходным кодом :). –