2013-01-08 48 views
1

我必須使用axis生成存根,因爲我正在使用的SOAP使用RPC。設置代碼後,我收到下面的堆棧跟蹤。如果有人有這個問題,請幫助。從使用Eclipse中的調試工具我可以看到Axis使用默認前綴,但問題是它使用的前綴之一已被使用,因此它返回null。有誰知道爲什麼會發生這種情況?使用客戶端存根時,前綴爲空

AxisFault 
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException 
faultSubcode: 
faultString: java.io.IOException: java.io.IOException: Non nillable element 'prefix' is null. 
faultActor: 
faultNode: 
faultDetail: 
    {http://xml.apache.org/axis/}stackTrace:java.io.IOException: java.io.IOException: Non nillable element 'prefix' is null. 
    at org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:275) 
    at org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504) 
    at org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980) 
    at org.apache.axis.encoding.SerializationContext.outputMultiRefs(SerializationContext.java:1055) 
    at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:145) 
    at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478) 
    at org.apache.axis.message.MessageElement.output(MessageElement.java:1208) 
    at org.apache.axis.client.Call.invoke(Call.java:2757) 
    at org.apache.axis.client.Call.invoke(Call.java:2443) 
    at org.apache.axis.client.Call.invoke(Call.java:2366) 
    at org.apache.axis.client.Call.invoke(Call.java:1812) 

回答

4

雖然這一年後我認爲它可以幫助你,因爲你與RPC,可能遺留系統的工作這個問題不回答。

在您生成的包含Apache Axis的客戶端存根中以「_xsd」結尾,其中Web服務提供者的對象被創建爲一個接一個地打開類。 某處在類的中間,你會發現一個靜態塊這樣的代碼:

static { 
    typeDesc.setXmlType(...); 
    org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc(); 
    elemField.setFieldName("prefix"); 
    elemField.setXmlName(new javax.xml.namespace.QName("", "prefix")); 
    elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); 
    elemField.setNillable(false); 
    typeDesc.addFieldDesc(elemField); 
} 

只是的nillable值更改爲真這樣的:

elemField.setNillable(true); 

你應該重複這個動作對所有類和這些類的所有字段(如果它們與您的WSDL中的對應值不匹配)(即,基於WSDL的定義,它們可以爲空)。

我注意到,Apache Axis 1.2 - 1.4默認情況下自動使屬性不是'nillable'。我不知道爲什麼會出現這種情況,但我認爲這是解決方案。

+0

尚未成功,因爲我有同樣的問題,並設法設置值「真」,但仍然得到例外。 非Nillable異常。 有沒有其他想法? – Bibhaw

相關問題