无法将xml字符串解组为java对象

无法将xml字符串解组为java对象,java,xsd,namespaces,Java,Xsd,Namespaces,将xml字符串解组到java对象会出现以下错误: javax.xml.bind.UnmarshaleException:意外元素(uri:“”), 本地:“AppServerResponse”)。预期的要素是 这是AppServerResponse Java类 @XmlRootElement (name = "AppServerResponse", namespace = "http://www.coda.com/efinance/schemas/appserver") @XmlAccesso

将xml字符串解组到java对象会出现以下错误:

javax.xml.bind.UnmarshaleException:意外元素(uri:“”), 本地:“AppServerResponse”)。预期的要素是

这是AppServerResponse Java类

@XmlRootElement (name = "AppServerResponse", namespace = "http://www.coda.com/efinance/schemas/appserver")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AppServerResponse", namespace = "http://www.coda.com/efinance/schemas/appserver", propOrder = {
    "getEnvironment",
    "listUserCompanies",
    "softToHardDate"
})
public class AppServerResponse  extends ServiceResponse
{

    @XmlElement(name = "GetEnvironment", namespace = "http://www.coda.com/efinance/schemas/appserver")

    protected GetEnvironmentResponseVerb getEnvironment;
    @XmlElement(name = "ListUserCompanies", namespace = "http://www.coda.com/efinance/schemas/appserver")
    protected ListUserCompaniesResponseVerb listUserCompanies;
    @XmlElement(name = "SoftToHardDate", namespace = "http://www.coda.com/efinance/schemas/appserver")

    protected SoftToHardDateResponseVerb softToHardDate;
解组功能和xml消息的代码已解组:

String strResponse = "<AppServerResponse uri=\"http://www.coda.com/efinance/schemas/appserver\" version=\"2.0\" >"
                                + "<GetEnvironment>"
                                    + "<Response status=\"success\">"
                                        + "<Environment>"
                                            + "<CmpCode>TEST</CmpCode>"
                                            + "<CapCode>INTERFACE</CapCode>"
                                            + "<HomeCurr>EUR</HomeCurr>"
                                            + "<DateOrder>1</DateOrder>"
                                            + "<DateDisplay>1</DateDisplay>"
                                            + "<DateSep>/</DateSep>"
                                            + "<HomeCurrDps>2</HomeCurrDps>"
                                            + "<HomeCurrSymbol>€</HomeCurrSymbol>"
                                            + "<HomeCurrSymbolPos>before</HomeCurrSymbolPos>"
                                            + "<HomeCurrLinkType>no_link</HomeCurrLinkType>"
                                            + "<HomeCurrParent>EURO</HomeCurrParent>"
                                            + "<CurrentPeriod>2018/4</CurrentPeriod>"
                                            + "<CmpTimeStamp>11</CmpTimeStamp>"
                                            + "<CapTimeStamp>3</CapTimeStamp>"
                                            + "<UsrTimeStamp>12</UsrTimeStamp>"
                                            + "<ServerVersion>14.000.0014</ServerVersion>"
                                        + "</Environment>"
                                    + "</Response>"
                                + "</GetEnvironment>"
                            + "</AppServerResponse>";
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(false);
            DocumentBuilder db;

            db = dbf.newDocumentBuilder();

            Document docResponse = db.parse(new InputSource(new StringReader(strResponse)));

            writeXmlDocumentToXmlFile(docResponse);

            JAXBContext contextResponse = JAXBContext.newInstance(responseClass);
            Unmarshaller u = contextResponse.createUnmarshaller();

            returnValue = u.unmarshal(docResponse);
String strResponse=“”
+ ""
+ ""
+ ""
+“测试”
+“接口”
+“欧元”
+ "1"
+ "1"
+ "/"
+ "2"
+ "€"
+“以前”
+“无链接”
+“欧元”
+ "2018/4"
+ "11"
+ "3"
+ "12"
+ "14.000.0014"
+ ""
+ ""
+ ""
+ "";
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
文档生成器数据库;
db=dbf.newDocumentBuilder();
documentdocresponse=db.parse(新的InputSource(新的StringReader(strResponse));
writeXmlDocumentToXmlFile(docResponse);
JAXBContext contextResponse=JAXBContext.newInstance(responseClass);
Unmarshaller u=contextResponse.createUnmarshaller();
返回值=u.unmarshal(docResponse);

您的JAXB注释指定您的元素在
http://www.coda.com/efinance/schemas/appserver
名称空间,但Response字符串中的元素实际上不在名称空间中。看起来您打算通过设置默认名称空间


String strResponse=“谢谢您的回答……我按如下方式更改了响应xml字符串,但没有任何帮助:>''String strResponse=“\”version=\''2.0\”>''''我仍然得到完全相同的异常。。。意外元素(uri:,本地:“AppServerResponse”)。预期元素为。请注意,响应来自外部系统,不应在我的代码中更改。我在这里添加只是为了测试您的评论
xmlns:ns=
:ns
不正确,因为这与
http://www.coda.com/efinance/schemas/appserver
带有“ns”前缀的命名空间。您的AppServerResponse没有前缀(例如),因此仍不在该命名空间中。相反,您需要使用
xmlns=
。如果您不应该更改strResponse,但可以更改JAXB代码,则可以尝试删除@XmlElement注释中的所有
名称空间=…
。再次感谢您的帮助。我们也尝试过这个选项(xmlns=“”…)。结果完全一样(没有解决问题)。删除Java类中的名称空间也没有帮助。