java - 在 SLSB 和 JAX-WS 中指定 JAXB 包

标签 java jaxb jax-ws jersey

我正在使用 SLSB 和 JAX-WS 创建一个简单的 SOAP Web 服务 注释。我要传递的对象是从 OGC 模式生成的 JAXB,感谢 java.net 上的 OGC 项目。我遇到麻烦的一种特定方法( 导致部署失败)是一个字段(eventTime) 请求对象 (GetResult) 与 请求对象。这种类型的 ObjectFactory 是不同的,并且有 在编码/解码时是个问题。

我遇到的部分错误:

元素没有带有 @XmlElementDecl 的 ObjectFactory {http://www.opengis.net/ogc}temporalOps。 此问题与以下位置有关: 在 protected javax.xml.bind.JAXBElement net.opengis.sos.v_1_0_0.GetResult$EventTime.temporalOps 在 net.opengis.sos.v_1_0_0.GetResult$EventTime 在 protected java.util.List net.opengis.sos.v_1_0_0.GetResult.eventTime 在 net.opengis.sos.v_1_0_0.GetResult 在公共(public) net.opengis.sos.v_1_0_0.GetResult net.opengis.sos.v_1_0_0.ObjectFactory.createGetResult() 在 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");

如何在 JAX-WS 上下文中设置 JAXB 包?

我的应用服务器/环境是 GF 3.1。

感谢您的帮助!

史蒂夫

最佳答案

我让它与@UsesJAXBContext 一起工作 - 起初有点麻烦,因为 NB 6.9 和 7.0b 想要链接 UsesJAXBContext 的 com.sun.internal.* 版本和相关的,这当然不是 JAX- WS 注册机正在寻找。一旦我修复了这些问题,并将依赖项添加到 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 的指针的 Aleksei Valikov!

关于java - 在 SLSB 和 JAX-WS 中指定 JAXB 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5627173/

相关文章:

Java 对象到 XML 元素?

Maven忽略执行配置

java - 什么是源 JAR?

java - 启动完成后 BroadcastReceiver 不工作

JAVA 项目...想要将 .java 文件添加到我的项目中

java - Web 服务契约首先逆转 - 引用 WSDL 中的 Java 类

java - 使用 JXBrowser 从 Javascript 调用 Java 时,JAX-WS 调用不起作用

java - 根据 Selenium 中的字符串选择复选框

java - 将 Java ENUM 转换为 XML

java - 在 JAXB 或 Xstream 中,是否可以在解码期间过滤掉类型/值上的某些子元素