【问题标题】:How to read XML file in Web service如何在 Web 服务中读取 XML 文件
【发布时间】:2016-06-15 17:58:01
【问题描述】:

我需要创建可以在两种语言之间翻译一些单词的 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 文件?

【问题讨论】:

    标签: java xml web-services soap


    【解决方案1】:

    我认为您的问题是“我是否在此 webMethod 中解析 XML 文件?”与 web 服务没有太大关系,但与软件设计和架构有关。遵循“单一职责”原则,您应该在另一个类中处理 XML。

    关于 xml 文件的阅读,这里有很多问题很好的答案,例如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>
    

    然后你可以在你的网络服务中调用数据源来翻译请求的单词:

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

    【讨论】:

    • 似乎我需要对 xml 文件进行解组以从中读取,而不是创建 Web 服务,但我真的可以使用更多帮助,因为我只做了简单的应用程序。例如,如果我有一个 xml 文件,我知道如何制作 xsd 并在 Main 类中进行解组,并在控制台中输出,但我不知道如何将其放入 webMethod 以创建 Web 服务。
    • 我添加了一个小例子,如何在你的 webservice 类中普遍实现数据的检索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多