Java 将SAXParser配置为在WildFly上处理DOCTYPE为的XML文档

Java 将SAXParser配置为在WildFly上处理DOCTYPE为的XML文档,java,jaxb,wildfly,resteasy,saxparser,Java,Jaxb,Wildfly,Resteasy,Saxparser,接收异常 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

接收异常

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开发的JavaEE应用服务器

RestEasy是Wildfly中包含的JBoss对JavaEEREST/RESTFul(JAX-RS)规范的实现

下面的代码用于复制/显示流程

XML文档

<?xml version="1.0" standalone="no"?>
<!DOCTYPE retsjaxb SYSTEM "retsjaxb.dtd">
<retsJaxb>
<fname>Jack</fname>
<lname>Daxter</lname>
</retsJaxb>
用于查询服务的JavaBean

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";
    }
    

}
import javax.enterprise.context.requestscope;
导入javax.inject.Named;
导入javax.ws.rs.client.client;
导入javax.ws.rs.client.ClientBuilder;
导入javax.ws.rs.core.Response;
@命名
@请求范围
公共类检索用户{
Logger=Logger.getLogger(“堆栈”);
公共字符串getJaxb(){
Client Client=ClientBuilder.newClient();
响应=客户端。目标(“http://localhost:8080/retesting/retsjaxb.xml).request().get();
RetsJaxb rets=response.readEntity(RetsJaxb.class);
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";
    }
    

}