我创建了一个代理服务来从Web接收XML。适用于带XSD的XML ,但是当 DOCTYPE 声明带有 DTD 时会失败。我添加了参数' ApplicationXMLBuilder.allowDTD' ,但仍然看到错误。有什么想法吗?
代理配置:
entry
示例请求XML:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="cx.soa.poxRouter"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<router>
<route xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
expression="local-name(/env:Body/*)"
match="Invoice">
<target to="" soapAction="urn:process">
<sequence>
<class name="cx.wso2.mediators.addNamespace">
<property name="nsToAdd" value="http://xmlns.ingram.com/invoice"/>
</class>
<log level="full"/>
<send>
<endpoint key="invoice.incoming.ingram.cxtec.prd.endpoint"/>
</send>
</sequence>
</target>
</route>
<route expression="true()">
<target to="" soapAction="">
<sequence>
<makefault version="soap11">
<code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/"
value="soap11Env:Server"/>
<reason value="Message Not Understood"/>
<role/>
</makefault>
<property name="RESPONSE" value="true"/>
<send/>
</sequence>
</target>
</route>
</router>
</inSequence>
</target>
<parameter name="ApplicationXMLBuilder.allowDTD">true</parameter>
<parameter name="transport.vfs.ContentType">application/xml</parameter>
<parameter name="serviceType">proxy</parameter>
<description/>
</proxy>
错误日志:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.025/cXML.dtd">
<cXML payloadID="1429879833205-3629664823566250562@216.109.111.63"
timestamp="2015-04-24T05:50:33-07:00" version="1.2.025" xml:lang="en-US">
<Header>
</Header>
<Request deploymentMode="test">
</Request>
</cXML>
答案 0 :(得分:1)
与 WSO2 ESB 小组的生产支持讨论后,以下是使其有效的选项列表:
1. Enable DTD processing globally
如果您正在使用消息跟踪器,则必须全局启用DTD处理。通过将以下属性添加到&#39; ESB_HOME / repository / conf / axis2 / axis2.xml&#39; 来全局启用DTD处理。
<parameter name="ApplicationXMLBuilder.allowDTD">true</parameter>
在Apache Axis中启用DTD处理存在安全问题。 DTD Security Concerns
2. Disable message tracing
在生产环境中,不建议启用邮件跟踪,因为它会增加显着的性能开销。如果我们禁用跟踪,则上述问题不会首先发生。
在我们的案例中,由于其他原因,我们必须启用邮件跟踪,因此按照案例(1)解决了问题。