2015-12-17 2 views
1

Я пытаюсь сделать словарь веб-сервисов, который будет анализировать XML-файл, содержащий слова на двух разных языках (сербский и итальянский) и вернуть перевод клиенту. Dictionary.xml помещается в корневой папке проекта и выглядит следующим образом:com.sun.enterprise.container.common.spi.util.InjectionException: ошибка при создании управляемого объекта для класса

<?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, который принимает слово, язык оригинала и laguage назначения:

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

ОК, я нашел ответ на этот вопрос. Я переместил логику для чтения файла в веб-методе «перевести». Строитель не смог найти файл, необходимый для синтаксического разбора этой версии кода. Наконец, я решил проблему, поместив xml-файл в тот же пакет, что и TranslatorClass, и вызвал поток InputStream = TranslatorClass.class.getResourceAsStream ("dictionary.xml"); После этого я просто передал поток строителю, чтобы разобрать, и это сработало.

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