Java com.sun.enterprise.container.common.spi.util.InjectionException:为类创建托管对象时出错
我正在尝试制作一个web服务字典,它将解析包含两种不同语言(塞尔维亚语和意大利语)的单词的XML文件,并将翻译结果返回给客户机。dictionary.xml位于项目根文件夹中,如下所示:Java com.sun.enterprise.container.common.spi.util.InjectionException:为类创建托管对象时出错,java,xml-parsing,soap-client,Java,Xml Parsing,Soap Client,我正在尝试制作一个web服务字典,它将解析包含两种不同语言(塞尔维亚语和意大利语)的单词的XML文件,并将翻译结果返回给客户机。dictionary.xml位于项目根文件夹中,如下所示: <?xml version="1.0" encoding="UTF-8"?> <dictionary> <word> <sr>automobil</sr> <it>macchina</it>
<?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>
@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;
}
}
我编写了一个实现类,如下所示:
<?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>
@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;
}
}
@WebService(endpointInterface=“service.Translator”)
公共类TranslatorClass实现了Translator{
文件文件;
字符串翻译;
元素根;
public TranslatorClass()引发ParserConfiguration异常、SAXException、IOException{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
doc=builder.parse(新文件(“dictionary.xml”);
root=doc.getDocumentElement();
}
@凌驾
公共字符串翻译(字符串原始、字符串ORGRANG、字符串destLang){
如果(或等于(“sr”)){
NodeList srNodeList=root.getElementsByTagName(“sr”);
对于(inti=0;iOK),我找到了这个问题的答案。我在web方法“translate”中移动了读取文件的逻辑。生成器无论如何都找不到使用此版本代码解析所需的文件。最后,我将xml文件与TranslatorClass放在同一个包中,并调用InputStream=TranslatorClass.class.getResourceAsStream(“dictionary.xml”);
在那之后,我只是将流传递给构建器进行解析,它就工作了。好的,我找到了这个问题的答案。我在web方法“translate”中移动了读取文件的逻辑。生成器无论如何都找不到使用此版本代码解析所需的文件。最后,我将xml文件与TranslatorClass放在同一个包中,并调用InputStream=TranslatorClass.class.getResourceAsStream(“dictionary.xml”);
在那之后,我只是将流传递给构建器进行解析,它就工作了