[英]How to read XML file in Web service
我需要創建可以在兩種語言之間翻譯一些單詞的 WEB 服務,所以我創建了一個界面:
@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 文件?
我想你的問題“我是否在這個 webMethod 中解析 XML 文件?” 特別是與網絡服務沒有太大關系,但與軟件設計和架構有關。 遵循“單一職責”原則,您應該在另一個類中進行 XML 處理。
關於讀取 xml 文件,這里有很多問題都有很好的答案,例如Java 讀取 xml 文件。
順便說一句:你有沒有想過使用數據庫? 在添加新翻譯時,它比 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>
然后你可以調用 webservice 中的數據源來翻譯請求的單詞:
@Override
public String translate(String word, String originalLanguage, String targetLanguage) {
XmlDataSource dataSource = new XmlDataSource();
return dataSource.getTranslation(word);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.