Укажите пакеты JAXB в SLSB и JAX-WS - PullRequest
5 голосов
/ 12 апреля 2011

Я создаю простой веб-сервис SOAP с использованием SLSB и JAX-WS. аннотаций. Объекты, которые я хотел бы передать, - это JAXB, сгенерированный из схем OGC, спасибо за проект OGC на java.net. Один конкретный метод, с которым у меня возникают проблемы (который вызывает сбой развертывания) ситуация, когда поле (eventTime) объекта запроса (GetResult) находится в другом пакете, чем объект запроса. ObjectFactory для этого типа отличается и там проблема при сортировке / отмене сортировки.

Подмножество ошибок, которые я получаю:

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

В стандартном приложении SE, когда я инициализирую 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");

Как мне установить пакеты JAXB в контексте JAX-WS?

Мой сервер приложений / среда GF 3.1.

Спасибо за помощь!

Steve

1 Ответ

3 голосов
/ 19 апреля 2011

Я работал с @UsesJAXBContext - сначала были небольшие проблемы, потому что NB 6.9 и 7.0b хотели связать com.sun.internal. * Версии UsesJAXBContext и связанные с ними, что, конечно, не то, что JAX- WS RI ищет. Как только я исправил их и добавил зависимость к jaxws-rt версии 2.2.3, все заработало.

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

Благодаря Алексею Валикову в списке рассылки ogc (проект java.net) указатель на @UsesJAXBContext!

...