2012-04-25 25 views
3

我們正在嘗試追查一個錯誤。我們在日誌中獲得上述錯誤。創建QName時,本地部分不能爲「空」

任何人都可以解釋這個消息的含義嗎?有沒有什麼典型的理由得到這個消息?

的堆棧跟蹤是:

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) 
+0

堆棧跟蹤可能會幫助人們,如果你有一個 – 2012-04-25 09:07:32

+0

@BruceLowe,對於評論我加入的回覆一個 – 2012-04-25 09:10:56

回答

5

在嘗試從String構造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); 
    } 
} 
1

這意味着您使用的命名空間的方法等createElementNS從而

document.createElementNS(namespace, null) 

createElementNSsetAttrbuteNS 一個和第二個參數創建DOM元素或屬性,qname是null,或者包含前綴,但不包含"foo:"中的本地部分。

編輯:

我會嘗試運行它通過驗證解析XML。很可能存在一些標籤或屬性名稱,如foo:foo:bar:baz,它們是有效的XML標識符,但根據XML名稱空間引入的其他限制無效。

+0

謝謝謝謝,我添加了一個堆棧跟蹤 – 2012-04-25 09:09:47

+0

@ShirazBhaiji,請看到我的編輯。 – 2012-04-25 09:13:11

0

雖然這是一箇舊線程,但我希望這個答案能夠幫助其他人搜索這個錯誤。 當我嘗試使用maven-enunciate-cxf-plugin:1.28構建Web應用程序時,我遇到了同樣的錯誤。

對我來說,這是後我添加了一個checked異常,以我的web服務的簽名引起的:

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

我已經使用JAX-WS Spec的異常拋出,但沒有成功。最後我在發現問題跟蹤系統中發現this issue,這表明此問題已在當前版本中得到解決,但我認爲它仍然存在。

最後我做了以下解決方法來解決我的問題: 將@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; 
} 
} 

就是這樣。希望能幫助到你。

相關問題