Я хотел бы задать вопрос об аннотации@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работает. Но для меня важно, чтобы это работало на стороне клиента.