2013-07-30 53 views
1

這是我第一次在這裏尋找幫助,我希望有人能幫助我。保存下載的XSD和WSDL

我已經完成了本地化我們的ant構建過程的任務,以幫助減少構建時間。

這個想法就像構建一個ant任務,它下載與特定服務關聯的WSDL並將它們保存到本地。長話短說,這已經完成,但由於某種原因,當使用本地文件構建服務時,我在第一個導入的XSD中收到'內容不允許在序言中'錯誤。

我已經搜索論壇,最常見的答案是在序言之前的隱藏字符,但我已檢查十六進制代碼,並沒有隱藏的字符。

這是WSDL序言

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

這是第一XSD序言

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

Prolog的十六進制

3C3F786D6C2076657273696F6E3D2231 
    2E302220656E636F64696E673D227574 
    662D3822207374616E64616C6F6E653D 
    226E6F223F3E 

哪些是與遠端的版本。

這也是下載的XSD和WSDL的保存方式。

private Document convertToXML(String xmlSource) throws Exception { 
    DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); 
    Document document = builder.parse(new InputSource(new StringReader(xmlSource))); 
    return document; 
} 


    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    transformer.setOutputProperty(OutputKeys.STANDALONE, "no"); 
    transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); 
    Result output = new StreamResult(new File(filePath)); 

讓我知道,如果我應該更具體或如果我需要添加更多的信息。

謝謝。

+0

好吧我認爲它必須與文件的保存方式有關,因爲我只是用已下載版本的代碼替換了現有本地XSD中的代碼,並且它工作正常... – bhumphrey

+0

選中此鏈接 - http://stackoverflow.com/questions/3665554/about-saxparseexception-content-is-not-allowed-in-prolog/7023984 – junkiecoder

+0

謝謝,我其實只是想通了。我將WSDL中的schemaLocation定義爲「exampleschemas \ example1 \ schema.xsd」,只要我將所有模式放入與WSDL相同的文件夾並更改模式位置以匹配它就可以正常工作。 – bhumphrey

回答

0

在記事本++中打開XSD/WSDL,點擊編碼菜單,選擇它爲UTF-8,並檢查是否有任何不必要的字符。請確保XSD/WSDL的第一行中沒有空格

+0

是的,我已經做到了。這是十六進制的序言。3C3F786D6C2076657273696F6E3D2231 2E302220656E636F64696E673D227574 662D3822207374616E64616C6F6E653D 226E6F223F3E – bhumphrey

1

問題在於我正在修改的WSDL中。

原始WSDL

<xsd:import namespace="http://someNameSpace" 
     schemaLocation="http://someLocation/dir1/dir2/schema.xsd"/> 

有問題的WSDL

<xsd:import namespace="http://someNameSpace" 
     schemaLocation="dir1/dir2/schema.xsd"/> 

工作WSDL

<xsd:import namespace="http://someNameSpace" 
     schemaLocation="schema.xsd"/> 

所以,現在的WSDL和XSD都是在沒有子目錄的目錄中。