5

我们正在尝试追踪一个错误。我们在日志中得到上述错误。

谁能解释这条消息的含义?收到此消息是否有任何典型原因?

堆栈跟踪是:

org.apache.axiom.om.OMException: java.lang.IllegalArgumentException: local part cannot be "null" when creating a QName
            at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:206)
            at org.apache.axiom.om.impl.llom.OMNodeImpl.build(OMNodeImpl.java:318)
            at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:618)
            at org.apache.axis2.jaxws.message.util.impl.SAAJConverterImpl.toOM(SAAJConverterImpl.java:147)
            at org.apache.axis2.jaxws.message.impl.XMLPartImpl._convertSE2OM(XMLPartImpl.java:77)
            at org.apache.axis2.jaxws.message.impl.XMLPartBase.getContentAsOMElement(XMLPartBase.java:203)
            at org.apache.axis2.jaxws.message.impl.XMLPartBase.getAsOMElement(XMLPartBase.java:255)
            at org.apache.axis2.jaxws.message.impl.MessageImpl.getAsOMElement(MessageImpl.java:464)
            at org.apache.axis2.jaxws.message.util.MessageUtils.putMessageOnMessageContext(MessageUtils.java:202)
            at org.apache.axis2.jaxws.core.controller.AxisInvocationController.prepareRequest(AxisInvocationController.java:370)
            at org.apache.axis2.jaxws.core.controller.InvocationController.invoke(InvocationController.java:120)
            at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:317)
            at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:148)
4

3 回答 3

8

在尝试从字符串构造 org.w3c.dom.Document 时,我收到了相同的错误消息(创建 QName 时本地部分不能为“null”)。在 DocumentBuilderFactory 上调用 setNamespaceAware(true) 后问题就消失了。工作代码片段如下。

private static Document getDocumentFromString(final String xmlContent)
  throws Exception
{
    DocumentBuilderFactory documentBuilderFactory =
                                DocumentBuilderFactory.newInstance();
    documentBuilderFactory.setNamespaceAware(true);
    try
    {
        return documentBuilderFactory
                    .newDocumentBuilder()
                    .parse(new InputSource(new StringReader(xmlContent)));
    }
    catch (Exception e)
    {
        throw new RuntimeException(e);
    }
}   
于 2015-05-27T06:07:11.190 回答
1

这意味着您正在使用其中一种命名空间方法创建 DOM 元素或属性,如下createElementNS所示

document.createElementNS(namespace, null)

or createElementNSorsetAttrbuteNS 和第二个参数,qname 是null, or 包括一个前缀但没有本地部分,如 in "foo:"

编辑:

我会尝试通过验证器运行它正在解析的 XML。根据 XML 命名空间引入的附加限制,可能有一些标记或属性名称,如foo:或是有效的 XML 标识符,但无效。foo:bar:baz

于 2012-04-25T09:06:58.460 回答
0

虽然这是一个旧线程,但我希望这个答案能帮助其他人搜索这个错误。当我尝试使用 maven-enunciate-cxf-plugin:1.28 构建 Web 应用程序时,我遇到了同样的错误。

对我来说,这是在我向我的 Web 服务签名添加检查异常后引起的:

    @WebMethod(operationName = "enquirySth")
    public IBANResponse enquirySth(String input) throws     I 
   InvalidInputException { ...

我使用JAX-WS Spec进行异常抛出,但没有成功。最后我在 Enunciate 问题跟踪系统中发现了这个问题,这表明这个问题在当前版本中已解决,但我认为它仍然存在。

最后,我完成了以下解决方法来解决我的问题:将 @XmlRootElement 添加到我的 FaultBean。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "FaultBean",propOrder = {"errorDescription", "errorCode"})
public class FaultBean implements Serializable {
@XmlElement(required = true, nillable = true)
protected String errorDescription;
@XmlElement(required = true, nillable = true)
protected String errorCode;

public FaultBean() {
}

public String getErrorDescription() {
    return this.errorDescription;
}

public void setErrorDescription(String var1) {
    this.errorDescription = var1;
}

public String getErrorCode() {
    return this.errorCode;
}

public void setErrorCode(String var1) {
    this.errorCode = var1;
}
}

就是这样。希望能帮助到你。

于 2015-02-04T07:57:10.320 回答