首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring管理自定义FAult

Spring管理自定义FAult
EN

Stack Overflow用户
提问于 2012-01-10 10:36:30
回答 1查看 2K关注 0票数 0

我正在使用菜谱:http://www.stevideter.com/2009/02/18/of-exceptionresolvers-and-xmlbeans/处理自定义soap错误

代码中将XML转换为soap错误细节的部分(使用标识转换-无XSLT)是:

代码语言:javascript
复制
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测试输出时,我得到了模式验证错误,因为响应是:

代码语言:javascript
复制
<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,响应应该如下所示:

代码语言:javascript
复制
<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声明吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-12 14:26:22

所以..。感谢Grzegorz,我发现xalan.jar工作得不太好,如果您将它放在JBoss4.2的目录上,并使用Java1.5进行编译的话。解决方案是下载xallan-2.7.1.jar并与xalan一起使用它,所有这些都应该可以很好地工作,使xmlns="“进入SoapREsponse中,例如:

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8801868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档