2016-06-15 65 views
0

我需要創建WEB服務實現該接口,所以我創建了將兩種語言之間的翻譯一些字接口如何讀取Web服務的XML文件

@WebService 
public interface Translator { 
    @WebMethod 
    String translate(String word, String originalLanguage, String targetLanguage); 
} 

和類:

@WebService(endpointInterface = "source.Translator") 
public class TranslatorImpl implements Translator{ 

    @Override 
    public String translate(String word, String originalLanguage, String targetLanguage) { 


     return word + originalLanguage +" butterfly " + targetLanguage + " baboska "; 
    } 

} 

但是因爲我對此很新,所以我不知道如何設置這個webMethod從一個應該是帶有單詞的數據庫的xml文件中讀取。現在我是怎麼做到的,當我測試它時,它只會返回你所寫的同一個單詞。任何人都可以向我解釋如何從XML文件讀取,所以如果我寫蝴蝶它翻譯或如果我寫花它翻譯。我在這個webMethod中解析XML文件嗎?

回答

0

我想你的問題「我在這個webMethod中解析XML文件嗎?」與web服務沒有多大關係,但與軟件設計和架構相關。遵循「單一責任」原則,您應該在另一個類中進行XML處理。

關於讀取xml文件,有很多問題在SO上有很好的答案,例如Java - read xml file

順便說一句:你有沒有想過使用數據庫?它在添加新翻譯時比XML文件更靈活,並且在處理可能會更改的數據(未來添加大量新條目)時被視爲最佳實踐。

編輯

有點快速和骯髒的例子有什麼我建議一個更好的瞭解。請注意,數據結構不包含各種語言的使用!如果你需要你必須改變這個例子。

,首先你需要的東西像的XmlDataSource類:

public class XmlDataSource { 

    public String getTranslation(String original) throws Exception { 
     Document d = readData(); 
     XPathFactory xPathfactory = XPathFactory.newInstance(); 
     XPath xpath = xPathfactory.newXPath(); 
     XPathExpression expr = xpath.compile("/dictionary/entry/translation[../original/text() = '" + original + "']"); 
     String translated = (String) expr.evaluate(d, XPathConstants.STRING); 
     return translated; 
    } 

    private Document readData() throws Exception { 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
     File datafile = new File("your/path/to/translations.xml"); 
     return documentBuilder.parse(new FileInputStream(datafile)); 
    } 
} 

在本例中的XPath依賴於這樣的結構:

<?xml version="1.0" encoding="UTF-8"?> 
<dictionary> 
    <entry> 
     <original>butterfly</original> 
     <translation>Schmetterling</translation> 
    </entry> 
    <entry> 
     <original>flower</original> 
     <translation>Blume</translation> 
    </entry> 
    <entry> 
     <original>tree</original> 
     <translation>Baum</translation> 
    </entry> 
</dictionary> 

然後就可以調用的數據源在你的web服務翻譯請求的字:

@Override 
    public String translate(String word, String originalLanguage, String targetLanguage) { 
     XmlDataSource dataSource = new XmlDataSource(); 
     return dataSource.getTranslation(word); 
    } 
+0

它似乎我需要做unmrshalling的XML文件從它讀取,並創建Web服務,但我真的可以使用一些更多的幫助,因爲我只做了簡單的應用程序。例如,如果我有一個xml文件,我知道如何在控制檯中輸出xsd並在Main類中進行反編組,但我不知道如何將它放在webMethod中以創建Web服務。 – Leona

+0

我添加了一個小例子,通常如何在您的webservice類中實現數據的檢索。 – Frank