2009-07-22 21 views
3

我試圖關閉在方式WSDL4J(1.6.2)導入文檔通過API文檔建議 :爲什麼WSDL解析器仍然導入外部文檔?

wsdlReader.setFeature("javax.wsdl.importDocuments", false); 

事實上,它停止導入XML架構文件與WSDL聲明:進口標籤但是會停止導入使用xs:import標籤聲明的文件。

下面的代碼片段[見在信的結尾]的文件示例

http://www.ibspan.waw.pl/~gawinec/example.wsdl

返回以下異常:

javax.wsdl.WSDLException: WSDLException (at /definitions/types/xs:schema): 
faultCode=OTHER_ERROR: An error occurred trying to resolve schema referenced 
at 'EchoExceptions.xsd', relative to 
'http://www.ibspan.waw.pl/~gawinec/example.wsdl'.: 
java.io.FileNotFoundException: This file was not found: 
http://www.ibspan.waw.pl/~gawinec/EchoExceptions.xsd 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at IsolatedExample.main(IsolatedExample.java:15) 
Caused by: java.io.FileNotFoundException: This file was not found: 
http://www.ibspan.waw.pl/~gawinec/EchoExceptions.xsd 
    at com.ibm.wsdl.util.StringUtils.getContentAsInputStream(Unknown Source) 
    ... 10 more 

您能否提供我任何解決這個問題?我只是不想導入 外部XML模式。

問候, 馬切伊


import javax.wsdl.WSDLException; 
import javax.wsdl.factory.WSDLFactory; 
import javax.wsdl.xml.WSDLReader; 

public class IsolatedExample { 
    public static void main(String[] args) { 

    WSDLFactory wsdlFactory; 
    try { 
     wsdlFactory = WSDLFactory.newInstance(); 
     WSDLReader wsdlReader = wsdlFactory.newWSDLReader(); 
     wsdlReader.setFeature("javax.wsdl.verbose", false); 
     wsdlReader.setFeature("javax.wsdl.importDocuments", false); 
     wsdlReader.readWSDL("http://www.ibspan.waw.pl/~gawinec/example.wsdl"); 
    } catch (WSDLException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

回答

1

快速查看WSDL4J(它已經有一段時間,因爲我已經與該項目直接合作)認爲,沒有專門的選項,以防止導入的模式的讀數。您可能已經偶然發現了WSDL4J的反序列化模式機制中的一個錯誤。也就是說,如果您對任何模式(包括WSDL文檔中內聯的模式)的內容不感興趣,則可以註冊自己的擴展註冊表(只需修改PopulatedExtensionRegistry類以省略SchemaDeserializer)。

具體地,離開了以下行:

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_1999, 
    SchemaImpl.class); 
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999, 
    new SchemaDeserializer()); 
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999, 
    new SchemaSerializer()); 

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2000, 
    SchemaImpl.class); 
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000, 
    new SchemaDeserializer()); 
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000, 
    new SchemaSerializer()); 

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2001, 
    SchemaImpl.class); 
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001, 
    new SchemaDeserializer()); 
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001, 
    new SchemaSerializer()); 
0

我沒有使用Java進行web服務,但你有沒有嘗試過的絕對路徑設置爲您導入的模式?也許它試圖加載本地文件。

你也可以嘗試嗅探電線,看看你是否提出請求,也許它是畸形的。

$ 0.02

相關問題