CXF: Как изменить пакет XML-схемы, импортированной WSDL, с помощью внешнего файла привязки JAXB?

У меня есть файл WSDL, который импортирует несколько XML-схем, каждая из которых имеет одно и то же пространство имен (назовем его A). Я пытаюсь использовать внешний файл привязки JAXB, чтобы изменить сгенерированное имя пакета (скажем, B) для этих схем. Вот пример:

У меня есть файл POM, содержащий конфигурацию для генерации кода из WSDL (с использованием плагина cxf-codegen).

Мой WSDL:

<definitions ...>
    <types>
         <xsd:schema elementFormDefault="qualified" targetNamespace="C">
             <xsd:import namespace="A" schemaLocation="SCHEMA_REF"/>
             <xsd:import namespace="A" schemaLocation="SCHEMA_REF"/>
             ...
         </xsd:schema>
    </types>
    ...
</definitions>

Вот мой фактический файл привязки, который вообще не работает, кажется, он вообще не применяется (нет сообщения об ошибке...).

<jaxws:bindings wsdlLocation="WSDL_LOCATION" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" jaxb:version="2.0">
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='C']/xs:import[@namespace='A']">.
        <jaxb:schemaBindings>
            <jaxb:package name="B" />
        </jaxb:schemaBindings>
    </jaxws:bindings>
</jaxws:bindings>

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

У вас есть какие-нибудь идеи? Я тут как-то застрял...

Заранее спасибо за ваш вклад!


person reef    schedule 18.01.2011    source источник


Ответы (2)


Попробуйте написать свои привязки так, как если бы импорт схемы был объединен с документом WSDL, путем прямой ссылки на его пространство имен:

<jaxws:bindings wsdlLocation="WSDL_LOCATION" 
        xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        jaxb:version="2.0">
    <jaxws:bindings 
node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='A']">
        <jaxb:schemaBindings>
            <jaxb:package name="B" />
        </jaxb:schemaBindings>
    </jaxws:bindings>
</jaxws:bindings>

Это сработало для меня. Престижность этой публикации, которая демонстрирует работу с импортированным схема.

person javabrett    schedule 19.09.2013

Интересно, у вас нет ответов :) К сожалению, нет возможности заархивировать то, что вы хотите. Единственный способ - определить отдельные файлы привязки для каждого файла схемы, который у вас есть, и это будет работать нормально.

person Stas    schedule 14.06.2011
comment
Спасибо за ваш ответ, я сейчас не работаю над этой темой, поэтому не могу протестировать это решение. Я буду, как только смогу! - person reef; 16.06.2011
comment
Одно дополнение - вам придется использовать чистое пространство имен jaxb для файлов XSD, jaxws не будет с ними работать. - person Stas; 16.06.2011