拆封肥皂信封时的NPE

时间:2019-01-15 14:54:14

标签: web-services soap jboss jaxb redhat

我的JBoss 7.1.3上有一个Web服务(也曾在6.x.x版本上尝试过),我尝试测试发送肥皂请求。当我这样做时,我得到了一个讨厌的NPE,而没有来自JAXB的任何错误消息。

11:30:01,415 WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-4) Interceptor for {urn:de:deutscherv:bund:marvin:bus:connectors:ejbs}HZKConnectorService#{urn:de:deutscherv:bund:marvin:bus:connectors:ejbs}send has thrown exception, unwinding now: java.lang.NullPointerException
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getNearestTypeName(JAXBContextImpl.java:655)
    at com.sun.xml.bind.v2.runtime.unmarshaller.XsiTypeLoader.parseXsiType(XsiTypeLoader.java:113)
    at com.sun.xml.bind.v2.runtime.unmarshaller.XsiTypeLoader.startElement(XsiTypeLoader.java:74)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:576)
    ...

JBoss使用JAXB的redhat实现(com.sun.xml.bind/jaxb-impl/2.2.11.redhat-4)。我发送的肥皂信封看起来像这样。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:nachrichten="urn:de:deutscherv:bund:marvin:domain:nachrichten"
              xmlns:rvglobal="urn:de:deutscherv:bund:marvin:domain:nachrichten:rvglobal">
<soapenv:Header/>
<soapenv:Body>
    <nachrichten:send>
        <nachrichten:message xsi:type="rvglobal:rvGlobalNachricht">
            <!--snip-->
        </nachrichten:message>
        <!--snip-->
    </nachrichten:send>
</soapenv:Body>

我想在解析nachrichten:message起始标记时引发NPE,该起始标记包含该元素的具体类型的注释。但是我看不出这里有什么问题。 我得到了一些xsds和一个wsdl定义,从它们生成了我的java类和webservice接口。我的rvGlobalNachricht类型的方案如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:nachrichten="urn:de:deutscherv:bund:marvin:domain:nachrichten" xmlns:rvglobal="urn:de:deutscherv:bund:marvin:domain:nachrichten:rvglobal" targetNamespace="urn:de:deutscherv:bund:marvin:domain:nachrichten:rvglobal" elementFormDefault="qualified" id="ws_rvglobal_connector" jxb:version="2.0">
    <xsd:import namespace="urn:de:deutscherv:bund:marvin:domain:nachrichten" schemaLocation="ws_connector.xsd"/>
    <xsd:annotation>
        <xsd:appinfo>
            <jxb:schemaBindings>
                <jxb:package name="de.deutscherv.bund.marvin.domain.nachrichten.rvglobal">
                    <jxb:javadoc>MarVIn RvGlobal Nachrichten</jxb:javadoc>
                </jxb:package>
            </jxb:schemaBindings>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:complexType name="rvGlobalNachricht">
        <xsd:complexContent>
            <xsd:extension base="nachrichten:nachricht">
                <!--snip-->
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <!--snip-->
</xsd:schema>

在wsdl中,我导入所有必需的xsds。

奇怪的事情是:当我在xsi:type元素中发送带有另一个nachrichten:message值的soap请求时,NPE不会出现并且一切正常。
为什么会抛出NPE? soap xml或xsd有什么问题?

0 个答案:

没有答案