2011-04-11 11 views
5

में जेएक्सबी पैकेज निर्दिष्ट करें मैं एसएलएसबी और जेएक्स-डब्ल्यूएस एनोटेशन का उपयोग करके एक सरल एसओएपी वेब सेवा बना रहा हूं। ऑब्जेक्ट्स जिन्हें मैं पास करना चाहता हूं वे हैं ओजीसी स्कीमा से उत्पन्न जेएक्सबी, जावानेट पर ओजीसी परियोजना के लिए धन्यवाद। एक विशेष विधि जिसमें मुझे परेशानी हो रही है (जो परिनियोजन विफल होने का कारण बनता है) एक ऐसी स्थिति है जहां अनुरोध ऑब्जेक्ट (GetResult) का फ़ील्ड (ईवेंटटाइम) अनुरोध ऑब्जेक्ट से भिन्न पैकेज में है। इस प्रकार के लिए ऑब्जेक्ट फैक्ट्री अलग है और एक समस्या है जब marshalling/unmarshalling।एसएलएसबी और जेएक्स-डब्ल्यूएस

त्रुटियों मैं हो रही है के एक उप समूह:

There's no ObjectFactory with an @XmlElementDecl for the element {http://www.opengis.net/ogc}temporalOps. this problem is related to the following location: at protected javax.xml.bind.JAXBElement net.opengis.sos.v_1_0_0.GetResult$EventTime.temporalOps at net.opengis.sos.v_1_0_0.GetResult$EventTime at protected java.util.List net.opengis.sos.v_1_0_0.GetResult.eventTime at net.opengis.sos.v_1_0_0.GetResult at public net.opengis.sos.v_1_0_0.GetResult net.opengis.sos.v_1_0_0.ObjectFactory.createGetResult() at net.opengis.sos.v_1_0_0.ObjectFactory

एक मानक एसई आवेदन में, जब मैं नीचे तरह JAXBContext प्रारंभ, सब कुछ अच्छी तरह से काम करता है।

JAXBContext context = JAXBContext.newInstance("net.opengis.sos.v_1_0_0:net.opengis.sensorml.v_1_0_1:net.opengis.sos.v_1_0_0.filter.v_1_1_0"); 

मैं जेएक्स-डब्ल्यूएस संदर्भ में जेएक्सबी पैकेज कैसे सेट करूं?

मेरा ऐप सर्वर/पर्यावरण जीएफ 3.1 है।

सहायता के लिए धन्यवाद!

स्टीव

+0

[यह ब्लॉग] (http://weblogs.java.net/blog/kohlert/archive/2006/10/jaxws_and_type.html) सेवा वर्ग पर @XmlSeeAlso के उपयोग को इंगित करने से वास्तविक वादा करता है, लेकिन ऐसा लगता है जेएक्स-डब्ल्यूएस 2.2 तक अपनाया नहीं गया था। मेट्रो (जेएक्स-आरएस आरआई प्रोजेक्ट के माध्यम से) 2.2 spec का समर्थन करता है ... लेकिन मेरे पास अभी तक काम नहीं कर रहा है। इसे जीएफ 3.0.1 पर आज़माकर ... शायद इसमें जेएक्स-डब्ल्यूएस का एक अनुपालन संस्करण नहीं है। आज रात बाद कोशिश करें। विचार, कोई भी? –

+0

@XmlSeeAlso एक अच्छा दृष्टिकोण की तरह लग रहा था लेकिन समस्या का समाधान नहीं किया। मुझे @UsesJAXBContext की ओर इशारा किया गया था, लेकिन ऐसा लगता है कि मेट्रो में एक [बग] (http://java.net/jira/browse/JAX_WS-270) है जहां यह JAXBContextFactory I के createJAXBContext() को कॉल नहीं करता है। बनाया गया, जो कई सालों से खुला रहा है। जांच जारी है .... –

उत्तर

3

मुझे मिल गया यह @UsesJAXBContext के साथ काम -। शुरू में थोड़ा मुसीबत था, क्योंकि एनबी 6.9 और 7.0b com.sun.internal से जोड़ने के लिए चाहते थे * UsesJAXBContext और संबंधित, के संस्करणों जो निश्चित रूप से जेएक्स-डब्ल्यूएस आरआई की तलाश नहीं है। एक बार मैंने इन्हें ठीक कर लिया, और jaxws-rt, संस्करण 2.2.3 पर निर्भरता जोड़ा, सबकुछ बढ़िया काम करता था। OGC (java.net परियोजना) सूचक को मेलिंग सूची पर अलेक्सेई Valikov को

@WebService(serviceName = "SOS")//, targetNamespace = "http://www.opengis.net/sos/1.0") 
@UsesJAXBContext(value = SosServices.SosJaxbContext.class) 
//@XmlSeeAlso({net.opengis.sos.v_1_0_0.filter.v_1_1_0.ObjectFactory.class, net.opengis.sensorml.v_1_0_1.ObjectFactory.class}) 
public class SosServices { 

@WebMethod(operationName = "GetResult") 
    public GetResultResponse getResult(GetResult request) { 
     throw new UnsupportedOperationException(); 
    } 

public static class SosJaxbContext implements JAXBContextFactory { 

     @Override 
     public JAXBRIContext createJAXBContext(SEIModel sei, 
       List<Class> classesToBind, List<TypeReference> typeReferences) 
       throws JAXBException { 

      List<Class> classList = new ArrayList<Class>(); 
      classList.addAll(classesToBind); 
      classList.add(TemporalOpsType.class); 

      List<TypeReference> refList = new ArrayList<TypeReference>(); 
      refList.addAll(typeReferences); 
      refList.add(new TypeReference(new QName("http://www.opengis.net/ogc", "temporalOps"), TemporalOpsType.class)); 

      return JAXBRIContext.newInstance(classList.toArray(new Class[classList.size()]), 
        refList, null, sei.getTargetNamespace(), false, null); 
     } 
    } 
} 

धन्यवाद @UsesJAXBContext करने के लिए!

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