kan*_*ant 5 java annotations java-metro-framework jax-ws jaxb
我想问一个关于jax-ws中@UsesJAXBContext注释的问题.我试图让它在客户端工作,但我可能会遗漏一些东西.这是我的情况:
我有web操作的操作:
@WebMethod(operationName = "putToQueue")
public boolean put(@WebParam(name = "queueName") String queueName, @WebParam(name = "element") Object element) {
return queues.get(queueName).offer(element);
}
Run Code Online (Sandbox Code Playgroud)
在客户端,我生成了QueueService和Queue(端口)......以及其他东西...... [响应请求.在这种情况下无关紧要.]我想让用户定义他/她可以放入队列的对象.但是,为了调用操作put(...),我需要将绑定对象(我尝试发送)放入JAXBContext中.我可以通过@XmlSeeAlso在生成的Queue存根的顶部做到这 一点 [我试过这个并且它可以工作].尽管如此,我需要更通用的解决方案来帮助我在运行时绑定对象.我认为我可以创建@QueueMessage注释和ClientJAXBContextFactory,并在创建时将标记的类添加到上下文中.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
接下来我尝试在生成的Queue之上使用@UsesJAXBContext.
@WebService(name = "Queue")
@UsesJAXBContext(ClientJAXBContextFactory.class)
public interface Queue {
...
}
Run Code Online (Sandbox Code Playgroud)
但是没有调用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工作.但对我而言,让它在客户端工作非常重要.
好的,我可以解决我面临的问题.仍然我不能使用@UsesJAXBContext与客户端使用webservice.但是我发现这个注释与具有修复后功能的bean相关联.所以有一个类UsesJAXBContextFeature
https://jax-ws.java.net/nonav/2.2.7/javadocs/com/sun/xml/ws/developer/UsesJAXBContextFeature.html
它可以作为端口或服务的参数传递(自jax-ws 2.2以来的服务).我对版本有点麻烦所以我决定生成类并使用jax-ws 2.1.现在我只是简单地创建这样的端口:
new QueueService().getQueuePort(new UsesJAXBContextFeature(new ClientJAXBContextFactory()));
Run Code Online (Sandbox Code Playgroud)
它的工作原理!
| 归档时间: |
|
| 查看次数: |
3833 次 |
| 最近记录: |