我需要创建一个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文件?
答案 0 :(得分:0)
我认为您的问题"我是否在此webMethod中解析XML文件?"与webservices没什么关系,特别是与softwaredesign和-architecture有关。遵循"单一责任"原则上你应该在另一个类中进行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);
}