2015-01-05 2 views
4

Я использую wsimport для создания клиентских заглушек для JAX-WS веб-сервиса называетwsimport клиент - настроить несколько имен пакетов

wsimport имеет -p вариант, который позволяет настроить имя пакета.

Для примера. если WSDL имеет пространство имен com.abc, то вы можете подписать com.abc по com.pqr, вызвав wsimport с командной строкой -p com.pqr.

Однако это прекрасно работает, только если в wsdl используется только одно пространство имен.
Если в wsdl существует несколько пространств имен, существует ли способ заменить каждое из них другим именем пакета.

Для примера. если я хочу, чтобы пространство имен com.abc.s1 было заменено пространством имен com.pqr.s1 & namespace com.abc.s2, которое должно быть заменено пространством имен com.pqr.s2.

Если я использую wsimport -p com.pqr.s1, он помещает все сгенерированные классы в com.pqr.s1

Есть ли способ добиться того, чего я хочу?

+0

Возможно с помощью специальной привязки jaxb. Отправьте свой wsdl (или что-то вроде этого здесь). Идеальный сценарий будет заключаться в том, что ваша различная схема будет находиться в отдельных xsds, но я полагаю, что у вас нет этого – kolossus

+0

@kolossus - они находятся в отдельных схемах. Как это помогает? – user93353

+0

Наличие в отдельных файлах означает, что вам не нужно иметь дело с путаницей Xpath или проливать кучу директив привязки jax-b в вашем WSDL – kolossus

ответ

4

Как правило, вы используете файл привязки jax-b для настройки процесса unmarshal для заданного XSD или WSDL. Язык привязок предоставляет директиву <package/> с целью настройки сгенерированного пакета схемы.

Учитывая отдельные схемы, в отдельных файлах, вы можете иметь композитные привязки файл, который будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       jaxb:version="2.0"> 
    <jaxb:bindings schemaLocation="Flight.xsd" node="/xsd:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="travel.flight"/> 
    </jaxb:schemaBindings> 
    </jaxb:bindings> 
    <jaxb:bindings schemaLocation="Hotel.xsd" node="/xsd:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="travel.hotel"/> 
    </jaxb:schemaBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

Где schemaLocation будет ссылаться на расположение отдельных файлов схема, node относится к XML-элемент, к которому должна применяться декларация привязки. <jaxb:package/> определит имя выходного пакета.

Затем вы должны кормить привязок файл в wsimport с помощью -b директивы и вы должны быть хорошо

Ссылка:

1

Путь я это сделал, это делая следующее.

Сначала создайте файл schema.xjc

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       jaxb:version="2.0"> 
    <jaxb:bindings schemaLocation="YOUR_URL?wsdl#types?schema1"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="your.package.name.schema1"/> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 
    <jaxb:bindings schemaLocation="YOUR_URL??wsdl#types?schema2"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="your.package.name.schema2"/> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

Имя пакета может быть все, что вы хотите, чтобы это было, пока она не содержит каких-либо зарезервированных ключевых слов в Java

Далее у вас есть для создания сценария wsimport.bat для генерации вашего пакета и кода в предпочтительном месте.

cd C:\YOUR\PATH\TO\PLACE\THE\PACKAGES 
wsimport -keep -verbose -b "C:\YOUR\PATH\TO\schema.xjb" YOUR_URL?wsdl 
pause 

Если вы не хотите использовать компакт-диск, вы можете поставить wsimport.bat в «C: \ YOUR \ PATH \ TO \ PLACE \ THE \ PACKAGES"

Если вы запустите его без -keep -verbose, он будет генерировать только пакеты, но не файлы .java.

-b будет убедиться, что schema.xjc используется при генерации

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