如何在Web服务中读取XML文件

时间:2016-06-15 17:58:02

标签: java xml web-services soap

我需要创建一个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文件?

1 个答案:

答案 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);
    }