我正在使用菜谱:http://www.stevideter.com/2009/02/18/of-exceptionresolvers-and-xmlbeans/处理自定义soap错误
代码中将XML转换为soap错误细节的部分(使用标识转换-无XSLT)是:
protected void customizeFault(MessageContext messageContext, Object endpoint, Exception ex, SoapFault soapFault) {
Transformer trn = null;
Result result = null;
SoapFaultDetail faultDetail = null;
try {
trn = TransformerFactory.newInstance().newTransformer();
faultDetail = soapFault.addFaultDetail();
// detail contains org.apache.xmlbeans marshalled xml
StreamSource detail = ...
result = faultDetail.getResult();
trn.transform(detail, result);
...
}当我用SoapUI测试输出时,我得到了模式验证错误,因为响应是:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">it.fault.InputFault</faultstring>
<detail>
<inputFault xmlns="http://fault.my.it">
<code>ERR-INPUT 003</code>
<message>Dati in input non completi</message>
</inputFault>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>我的XSD没有elementFormDefault,所以它是unqualified,响应应该如下所示:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">it.fault.InputFault</faultstring>
<detail>
<inputFault xmlns="http://fault.my.it">
<code xmlns="">ERR-INPUT 003</code>
<message xmlns="">Dati in input non completi</message>
</inputFault>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>结果应该与xmlnbeans封送对象相同,并且应该包含xmlns=""。
有人能帮助我理解为什么转换删除了xmlns声明吗?
谢谢。
发布于 2012-01-12 14:26:22
所以..。感谢Grzegorz,我发现xalan.jar工作得不太好,如果您将它放在JBoss4.2的目录上,并使用Java1.5进行编译的话。解决方案是下载xallan-2.7.1.jar并与xalan一起使用它,所有这些都应该可以很好地工作,使xmlns="“进入SoapREsponse中,例如:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">it.my.fault.InputFault</faultstring>
<detail>
<inputFault xmlns="http://my.it/version-1-0-0">
<codice xmlns="">ERR-INPUT 003</codice>
<messaggio xmlns="">Dati in input non completi</messaggio>
</inputFault>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>https://stackoverflow.com/questions/8801868
复制相似问题