当前位置: 首页 > 面试题库 >

在SLSB和JAX-WS中指定JAXB软件包

班高明
2023-03-14
问题内容

我正在使用SLSB和JAX-WS批注创建一个简单的SOAP
Web服务。我要传递的对象是从OGC模式生成的JAXB,这要感谢java.net上的OGC项目。我遇到的一种特定方法(导致部署失败)是一种情况,其中请求对象(GetResult)的字段(eventTime)与请求对象位于不同的包中。此类型的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");

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

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

谢谢您的帮助!

史蒂夫


问题答案:

我将它与@UsesJAXBContext一起使用-最初遇到了一些麻烦,因为NB
6.9和7.0b希望链接UsesJAXBContext的com.sun.internal。*版本和相关版本,这当然不是JAX-WS
RI寻找。一旦我修复了这些问题,并将依赖性添加到2.2.3版的jaxws-rt中,一切工作就很好了。

@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项目)邮件列表上的Aleksei Valikov指向@UsesJAXBContext的指针!



 类似资料:
  • 问题内容: 如何编写JAX-WS服务,以便我的@WebMethod的@WebParam是类似于DateTime的Joda- Time类?参数上的@XmlTypeAdapter是否可以工作?我正在部署到GlassFish 2.1。 让我澄清这个问题,因为到目前为止,这两个答案都集中在将自定义类型绑定到现有的JAXB类上,这与之相关,但与我要问的问题无关。如何使以下@WebService接受joda

  • JAX-WS (JavaTM API for XML-Based Web Services)规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。 在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要

  • 我有一个带有jaxb-impl.jar的第三方jar,并将其包含在清单类路径中。问题是,提供自己的JAXB版本(不管它是哪个版本)似乎会破坏JAX-WS中的SoapFaultBuilder。 根据非官方的JAXB指南,Sun在将JAXB折叠到JDK中时似乎故意更改了包名,以避免与独立版本发生冲突。但是,JDK附带的SoapFaultBuilder(我相信是JAX-WS的一部分)明确依赖于新的内部包

  • 问题内容: 我有一个已导入xsd的wsdl,此xsd具有类似如下的限制: 因此,我想细想一下,当我通过netbeans将这个耳朵部署到glassfish上时,将对传入的数据进行验证,但事实并非如此。在将数据传递给我的@WebService对象并转换为Java对象之前,是否需要进行任何调用以确保数据经过验证。 问题答案: 使用SchemaValidation批注。 请注意,它仅适用于文档/文字样式的

  • Apache CXF WebService 没有话说,享受沉默 showcase项目已演示了JAX-WS2.0 + CXF 的最重要特性, 其中客户端在测试用例里. SOAP这个名字,本身就是个笑话,一点都不Simple。其他一些WS-*协议,包括安全,附件等都不再看好,因此SpringSide4.0没什么更新。 测试工具依然是SoapUI。 Tips 1. CXF自动生成的WSDL与WADL文件

  • 关于JAX-WS Web服务,我现在面临一个恼人的错误几天了。我打算用使用自定义类型(基本上是“JAX-WS原语”类型的结构,如int、long和string)作为参数和返回值的方法生成一个网络服务。 这是我在尝试发布Web服务时遇到的例外: 异常线程"main"javax.xml.ws.WebServiceExc0019:类org.econet.ecomanager.msgexchange.we