2016-05-04 5 views
0

Я должен управлять многими веб-сервисами и должен ставить свое приложение среди них и клиентов: клиенты будут называть меня, я буду звонить серверам и управлять ответами, чтобы отправлять их клиентам ,Изменение пространства имен объектов в jaxb

Оба запроса и ответа имеют «конверт»: разные, но почти одинаковые.

Позволяет сказать:

<req xmlns="namespaceReq"> 
<req-data>..different info 1..</req-data> 
<info>...Info object...</info> 
</req> 

и

<resp xmlns="namespaceResp"> 
<resp-data>..different info 2...<resp-data> 
<info>...Info object...</info> 
</resp> 

Так что я хочу, чтобы общие классы между запросом и ответом -aka инфо объектном; Я сделал пакет java для запроса (с пространством имен запроса в его именах пакетов и классах Req и Req-data), еще один для ответа (с пространством имен ответа в его имени пакета и также, Resp и Resp-data) и сделали еще один пакет для хранения общей части (класс Info), и есть моя проблема ...

Как мне управлять пространствами имен, чтобы я мог совместно использовать общий объект Info как для запроса, так и для ответа?

Если я кладу имена запроса в package-info.java на это работает для запроса, но не для ответа, если я надену ответ не работает для запроса ...

ответ

1

Распространенное объекты пакета должен определить свое собственное пространство имен XML ... Я сделал вид конфигурации, что вы пытаетесь сделать, но я создал объекты из XSD-файлов ... Пример:

XSD Commons:

<xs:schema 
    targetNamespace="http://xyz/commons" 
    xmlns:tns="http://xyz/commons" 
    elementFormDefault="qualified" 
    version="1.0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="InfoType"> 
    <xs:sequence> 
     <xs:element name="Address" type="xs:string" maxOccurs="1" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

XSD Запросы:

<xs:schema 
targetNamespace="http://xyz/requests" 
xmlns:tns="http://xyz/requests" 
xmlns:commons="http://xyz/commons" 
elementFormDefault="qualified" 
version="1.0" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    <xs:import namespace="http://xyz/commons" schemaLocation="commons.xsd" /> 

    <xs:element name="Request" type="tns:RequestType" /> 

    <xs:complexType name="RequestType"> 
    <xs:sequence> 
     <xs:element name="info" type="commons:InfoType" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
+0

Спасибо, но проблема возникает, когда я вызываю службы, и я пытаюсь связать их ответы с моей моделью, и я не могу изменить службы, потому что не мои. Проблема заключается в привязке их ответов к моей модели, потому что у них нет этого общего пакета. :( Я не думаю, что то, что я хочу сделать, даже возможно .... Хотя это не так экстренно ... – inigoD

+0

Это просто идея (я не пробовал это раньше), но может быть, вы должны проверьте, можете ли вы расширять (наследование) объекты своих сервисов в пространство имен собственных объектов. –

+0

Или используйте шаблон адаптера, чтобы исправить объекты ваших услуг в свои собственные ... –

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