Как установить собственный JAXBContext

Я хотел бы задать вопрос об аннотации@UsesJAXBContextв jax-ws. Я пытаюсь заставить его работать на стороне клиента, но я, вероятно, что-то упускаю. Вот мой случай:

У меня есть работающий веб-сервис:

@WebMethod(operationName = "putToQueue")
public boolean put(@WebParam(name = "queueName") String queueName, @WebParam(name = "element") Object element) {
    return queues.get(queueName).offer(element);
}

На стороне клиента я сгенерировал QueueService и Queue (порт)... и прочее... [отвечает на запросы. В данном случае не имеет значения.] Я хотел бы, чтобы пользователь определял объект, который он мог бы поставить в очередь. Однако для вызова операции put(...)мне нужно связать объект (который я пытаюсь отправить) в JAXBContext. Я мог бы сделать это @XmlSeeAlsoв верхней части сгенерированной заглушки очереди [я пробовал это, и это работает]. Тем не менее мне нужно более общее решение, которое поможет мне связать объект во время выполнения. Я подумал, что могу создать аннотацию @QueueMessageи ClientJAXBContextFactoryи добавить отмеченный класс в контекст при его создании.

public class ClientJAXBContextFactory implements JAXBContextFactory {

    @Override
    public JAXBRIContext createJAXBContext(SEIModel seim, List classes, List references) throws JAXBException {
        Reflections reflections = new Reflections("");
        Set> annotated = reflections.getTypesAnnotatedWith(QueueMessage.class);
        classes.addAll(annotated);

        return JAXBContextFactory.DEFAULT.createJAXBContext(seim, classes, references);
    }
}

Затем я попытался использовать @UsesJAXBContextповерх сгенерированной очереди.

@WebService(name = "Queue")
@UsesJAXBContext(ClientJAXBContextFactory.class)
public interface Queue {
...
}

Но createJAXBContext(...)не вызывается, и jax-ws просто создает свой JAXBContextImpl.

Я прочитал:

http://weblogs.java.net/blog/jitu/archive/2008/08/control_of_jaxb.html

http://www.techques.com/question/1-5627173/Specify-JAXB-Packages-in-SLSB-and-JAX-WS

и несколько вопросов по stackOverFlow. Буду признателен за советы. Можно ли реализовать идею, изложенную в моем вопросе?

Также я могу добавить, что на стороне сервера... @UsesJAXBContextработает. Но для меня важно, чтобы это работало на стороне клиента.

5
задан Marco 4 February 2015 в 10:20
поделиться