Chciałbym zadać pytanie dotyczące @UsesJAXBContext adnotacji w jax-ws. Staram się, aby działało po stronie klienta, ale prawdopodobnie czegoś brakuje. Oto mój przypadek:Jak ustawić niestandardowy JAXBContext
Mam usługa z eksploatacji:
@WebMethod(operationName = "putToQueue")
public boolean put(@WebParam(name = "queueName") String queueName, @WebParam(name = "element") Object element) {
return queues.get(queueName).offer(element);
}
Po stronie klienta i generowanego QueueService i Queue (port) ... i inne rzeczy ... [respones wnioski. W tym przypadku nieistotne.] Chciałbym pozwolić użytkownikowi zdefiniować obiekt, który mógłby umieścić w kolejce. Jednak aby wywołać operację, należy umieścić (...) Potrzebuję obiektu powiązania (który próbuję wysłać) do JAXBContext. Mogę to zrobić przez @XmlSeeAlso w górnej części wygenerowanego Queue Queue [próbowałem tego i działa]. Niemniej jednak potrzebuję bardziej ogólnego rozwiązania, które pomoże mi związać obiekt w czasie wykonywania. Pomyślałem, że mogę utworzyć adnotację @QueueMessage iClientJAXBContextFactory i dodać zaznaczoną klasę do kontekstu podczas jej tworzenia.
public class ClientJAXBContextFactory implements JAXBContextFactory {
@Override
public JAXBRIContext createJAXBContext(SEIModel seim, List<Class> classes, List<TypeReference> references) throws JAXBException {
Reflections reflections = new Reflections("");
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(QueueMessage.class);
classes.addAll(annotated);
return JAXBContextFactory.DEFAULT.createJAXBContext(seim, classes, references);
}
}
Następny próbowałem korzystanie @UsesJAXBContext na szczycie generowanego kolejce.
@WebService(name = "Queue")
@UsesJAXBContext(ClientJAXBContextFactory.class)
public interface Queue {
...
}
Ale createJAXBContext (...) nie jest wywoływany i JAX-WS po prostu stworzyć swój JAXBContextImpl.
Znam:
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
a niektóre pytanie na StackOverflow. Byłbym wdzięczny za rady. Czy można zrealizować pomysł przedstawiony na moje pytanie?
Również mogę dodać, że po stronie serwera ... @UsesJAXBContext działa. Ale jest to dla mnie ważne, aby działało po stronie klienta.