2016-06-15 5 views
0

Мне нужно создать веб-сервис, который будет переводить некоторые слова между двумя языками, так что я создал интерфейсКак читать XML-файл в веб-службе

@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-файла, поэтому, если я напишу бабочку, это перевести это, или если я напишу цветок, перевести это. Я обрабатываю XML-файл в этом webMethod?

ответ

0

Я думаю, ваш вопрос «Я занимаюсь анализом XML-файла в этом веб-методе?» не имеет ничего общего с веб-сервисами, в частности, с программным обеспечением и архитектурой. Следуя принципу «единой ответственности», вы должны иметь обработку XML в другом классе.

Что касается чтения XML-файла, здесь есть много вопросов с хорошими ответами на SO, например Java - read xml file.

Кстати: Вы думали использовать базу данных? Он более гибкий, когда речь заходит о добавлении новых переводов, чем XML-файл, и рассматривается как лучшая практика при обработке данных, которые могут быть изменены (много новых записей добавлено в будущем).

EDIT

Немного быстрый и грязный пример, чтобы лучше понять, о чем я предложил. Имейте в виду, что структура данных не распространяется на использование разных языков! Если вам нужно, вам нужно изменить пример.

Прежде всего, вам нужно что-то вроде класса 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); 
    } 
+0

кажется, что мне нужно сделать unmarshalling из xml файл для чтения из него, а не создание веб-службы, но я мог бы использовать некоторую дополнительную помощь, так как я сделал только простое приложение. Например, если у меня есть один файл xml, я знаю, как сделать xsd и сделать unmarshalling в Main class с выходом в консоли, но я не знаю, как поместить его в webMethod для создания веб-сервиса. – Leona

+0

Я добавил небольшой пример того, как обычно добиться получения данных в вашем классе webservice. – Frank

Смежные вопросы