2011-04-11 17 views
5

SLSB ve JAX-WS ek açıklamalarını kullanarak basit bir SOAP web hizmeti oluşturuyorum. Geçmek istediğim nesneler, OGC şemalarından üretilen JAXB, java.net'deki OGC projesi için teşekkürler. Sorunlu (özel bir yöntem, ( dağıtımın başarısız olmasına neden olur), istek nesnesinin (GetResult) bir alanının (eventTime) 'un, istek nesnesinden farklı bir pakette olduğu bir durumdur. Bu tür ObjectFactory farklıdır ve , marshalling/unmarshalling olduğunda bir sorundur.SLSB ve JAX-WS'de JAXB Paketlerini Belirtme

alıyorum hataların bir alt: Aşağıda gibi JAXBContext başlatmak zaman standart SE uygulamasında

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

, her şey iyi çalışıyor.

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

JAXB paketlerini JAX-WS bağlamında nasıl ayarlayabilirim?

Uygulama sunucum/çevre GF 3.1.

Yardımın için teşekkürler!

Steve

+0

[Bu blog] (http://weblogs.java.net/blog/kohlert/archive/2006/10/jaxws_and_type.html) hizmet sınıfındaki @XmlSeeAlso kullanımını belirten, gerçekten umut verici görünüyor, ancak JAX-WS 2.2'ye kadar kabul edilmedi. Metro (JAX-RS RI projesi ile) 2.2 spesifikasyonu destekliyor gibi görünüyor ... ama henüz tam çalışmıyor. GF 3.0.1'de denemek ... belki de JAX-WS'nin uyumlu bir versiyonuna sahip değildir. Bu gece daha sonra dene. Düşünceler, kimse? –

+0

@XmlSeeAlso iyi bir yaklaşım gibi görünüyordu ama sorunu çözmedi. @UsesJAXBContext'e işaret ettim, fakat metroda [bug] (http://java.net/jira/browse/JAX_WS-270) var ve JAXBContextFactory I'in createJAXBContext() işlevini çağırmıyor. birkaç yıldır açık olan yaratılmıştır. Soruşturma devam ediyor .... –

cevap

3

Ben @UsesJAXBContext ile çalışan var -. NB 6.9 ve 7.0b com.sun.internal bağlamak istedim çünkü ilk başta küçük bir sorun vardı * UsesJAXBContext ve ilgili, versiyonları hangi elbette JAX-WS RI'nin aradığı şey değil. Bunları tamir ettikten ve jaxws-rt, 2.2.3 sürümüne bağımlılığı ekledikten sonra, her şey harika çalıştı. OGC işaretçi (java.net projesi) posta listesi üzerinde Aleksei Valikov için

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

sayesinde @UsesJAXBContext için!