如何解决配置SAXParser以在WildFly上使用DOCTYPE处理XML文档
接收异常
javax.servlet.ServletException: org.jboss.resteasy.plugins.providers.jaxb.JAXBUnmarshalException: javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 10; DOCTYPE is disallowed when the feature "http://apache.org/xml/features/disallow-doctype-decl" set to true.]
使用RestEasy客户端api通过XML文档中的DOCTYPE声明查询RETSfule Web服务时。
运行时环境:
WildFly是JBoss的Java EE应用程序服务器。
RestEasy是Wildfly中包含的JBoss的Java EE REST / RESTFul(JAX-RS)规范的实现。
下面的代码可以复制/显示该过程。
XML文档
<?xml version="1.0" standalone="no"?>
<!DOCTYPE retsjaxb SYSTEM "retsjaxb.dtd">
<retsJaxb>
<fname>Jack</fname>
<lname>Daxter</lname>
</retsJaxb>
JAXB
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class RetsJaxb {
private String fname;
private String lname;
@XmlElement
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
@XmlElement
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
}
用于查询服务的Java Bean
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;
@Named
@RequestScoped
public class RetsClient {
Logger logger = Logger.getLogger("stack");
public String getJaxb() {
Client client = ClientBuilder.newClient();
Response response = client.target("http://localhost:8080/retesting/retsjaxb.xml").request().get();
RetsJaxb rets = response.readEntity(RetsJaxb.class); <--- exception
logger.info(rets.getFname());
return "hello";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。