Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JAXB2 кастомизация complexType


Автор: Strange74 7.6.2008, 19:47
Здравствуйте, столкнулся с такой проблемой:

Есть веб-сервис на xfire, в нем существует метод:
Код

@WebMethod
    @WebResult(name="registry")
    public MembersRegistry getRegistry()
    {
        return MembersRegistry.getInstance();
    } 


класс MembersRegistry - следующий:

Код

@XmlType(namespace="http://registry.ns.naumen.ru")
public class MembersRegistry
{
    private static Map<Long, String> members = new HashMap<Long, String>();
    
    private static final MembersRegistry _instance = new MembersRegistry();
    
    private MembersRegistry() {}
    
    public static MembersRegistry getInstance()
    {
        return _instance;
    }
    
    static
    {
// Здесь заполнение мэпа
    }

    
    public Map<Long, String> getMembers()
    {
        return members;
    }  
}



для MembersRegistry написано aegis-представление:

Код

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:xsd="http://xfire.codehaus.org/schemas/1.0/mapping.xsd"
    xmlns:registry="http://registry.ns.naumen.ru">
    <mapping name="registry:MembersRegistry">
        <property name="members" keyType="java.lang.Long" componentType="java.lang.String" />
    </mapping>
</mappings>



Теперь далее, я хочу чтобы клиент, который генерируется с помощью wsgen оперировал этим мепом (Map<Long, String>).

Если бы данные в xml-schema были простыми (например числами), можно было бы использовать следующий код для jaxb-генерации:

Код

<jaxb:globalBindings>
       <jaxb:javaType name="java.util.Map" xmlType="tns:long2stringMap"
                     parseMethod="org.beq.xfire.services.util.Long2StringMapAdapter.parseMap" 
                      printMethod="org.beq.xfire.services.util.Long2StringMapAdapter.print" />                             
</jaxb:globalBindings>


Все xml-типы берутся при генерации из wsdl сервиса. При генерации по такому коду возникает ошибка:
Код

[wsgen] ERROR ErrorReceiverImpl                   - undefined simple type "long2stringMap".


Если добавлять нэймспейс в котором (в wsdl) определен данный тип long2stringMap - не помогает. Я думаю проблема в том что это complexType, а не simple type.

Собственно вопрос. Кто-нибудь  знает, как в jaxb настроить адаптер для сложного типа. Хотя бы ссылку если можно, потому что не нашел, хоть и очень искал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)