2012-06-20 8 views
5

कैसे सेट करें मैं जैक्स-डब्ल्यूएस में @UsesJAXBContext एनोटेशन के बारे में एक प्रश्न पूछना चाहता हूं। मैं इसे क्लाइंट साइड पर काम करने की कोशिश करता हूं लेकिन मुझे शायद कुछ याद आ रहा है।कस्टम JAXBContext

मैं ऑपरेशन के साथ वेब सेवा मिल गया है:

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

ग्राहक के पक्ष मैं QueueService और क़तार (बंदरगाह) ... और अन्य सामग्री उत्पन्न पर ... [respones अनुरोध यहाँ मेरी मामला है। इस मामले में अप्रासंगिक।] मैं उपयोगकर्ता को उस वस्तु को परिभाषित करना चाहता हूं जिसे वह कतार में डाल सकता है। हालांकि ऑपरेशन का आह्वान करने के लिए डाल दें (...) मुझे JAXBContext में बाइंड ऑब्जेक्ट (जिसे मैं भेजने का प्रयास करता हूं) की आवश्यकता है। मैं इसे उत्पन्न कर सकता हूं @XmlSeeAlso जेनरेट किए गए कतार स्टब के शीर्ष पर [मैंने यह कोशिश की और यह काम करता है]। फिर भी मुझे अधिक सामान्य समाधान की आवश्यकता है जो मुझे रनटाइम पर ऑब्जेक्ट को बाध्य करने में मदद करे। मैंने सोचा कि मैं @QueueMessage एनोटेशन और क्लाइंटजेक्सबीएनएन्टेक्स्ट फैक्टरी बना सकता हूं और इसे बनाते समय संदर्भ में चिह्नित वर्ग जोड़ सकता हूं।

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); 
    } 
} 

अगला मैं उत्पन्न कतार के शीर्ष पर उपयोग की कोशिश की @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

ठीक है मैं जिस समस्या का सामना कर रहा था उसका प्रबंधन कर सकता था। फिर भी मैं webs12 उपभोक्ता उपभोक्ता के साथ @UsesJAXBContext का उपयोग नहीं कर सका। लेकिन मैंने पाया कि यह एनोटेशन पोस्ट-फिक्स फीचर के साथ सेम से बंधे हैं। तो वहाँ एक वर्ग UsesJAXBContextFeature

https://jax-ws.java.net/nonav/2.2.7/javadocs/com/sun/xml/ws/developer/UsesJAXBContextFeature.html

है और यह (jax-ws 2.2 के बाद से सेवा) बंदरगाह या सेवा के तर्क के रूप में पारित किया जा सकता है। मुझे संस्करणों के साथ थोड़ा परेशानी मिली है इसलिए मैंने कक्षा उत्पन्न करने और जैक्स-डब्ल्यूएस 2.1 का उपयोग करने का फैसला किया। अब मैं बस इस तरह पोर्ट बना रहा हूं:

new QueueService().getQueuePort(new UsesJAXBContextFeature(new ClientJAXBContextFactory())); 

और यह काम करता है!

संबंधित मुद्दे