我正在尝试创建一个Web服务字典,该字典将解析包含两种不同语言(塞尔维亚语和意大利语)的XML文件,并将翻译返回给客户端。 dictionary.xml放在项目根文件夹中,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
<word>
<sr>automobil</sr>
<it>macchina</it>
</word>
<word>
<sr>cvet</sr>
<it>fiore</it>
</word>
<word>
<sr>knjiga</sr>
<it>libro</it>
</word>
<word>
<sr>pas</sr>
<it>cane</it>
</word>
<word>
<sr>jabuka</sr>
<it>mela</it>
</word>
</dictionary>
我创建了一个只有一个接收单词,原始语言和目标语言的WebMethod的接口:
package service;
@WebService
public interface Translator {
@WebMethod
String translate(String original, String orgLang, String destLang);
}
我写了一个看起来像这样的实现类:
@WebService(endpointInterface = "service.Translator")
public class TranslatorClass implements Translator {
Document doc;
String translation;
Element root;
public TranslatorClass() throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(new File("dictionary.xml"));
root = doc.getDocumentElement();
}
@Override
public String translate(String original, String orgLang, String destLang) {
if(orgLang.equals("sr")) {
NodeList srNodeList = root.getElementsByTagName("sr");
for(int i=0; i<srNodeList.getLength(); i++) {
Node node = srNodeList.item(i);
if(node.getTextContent().equals(original)) {
translation = node.getNextSibling().getTextContent();
}
}
}
else {
NodeList itNodeList = root.getElementsByTagName("it");
for(int i=0; i<itNodeList.getLength(); i++) {
Node node = itNodeList.item(i);
if(node.getTextContent().equals(original)) {
translation = node.getPreviousSibling().getTextContent();
}
}
}
return translation;
}
}
当我尝试在GlassFish服务器上测试它时,我从帖子的标题中得到错误。请问有人能帮我一把吗? xml文件应该放在其他位置吗?
感谢。
答案 0 :(得分:0)
好的,我找到了答案。我在web方法“translate”中移动了读取文件的逻辑。无论如何,构建器无法找到解析此版本代码所需的文件。最后,我通过将xml文件放在与TranslatorClass相同的包中并调用InputStream stream = TranslatorClass.class.getResourceAsStream(“dictionary.xml”)来解决了这个问题。 之后,我只是将流传递给构建器进行解析,然后就可以了。