CXF如何为原因标签设置语言环境?

时间:2014-10-29 15:32:28

标签: java web-services cxf

我有一个基于CXF的Web服务。 当我使用CXF soap故障时,默认情况下我得到以下格式的原因标签:

     <soap:Reason>
        <soap:Text xml:lang="en">Le service n’est pas accessible.</soap:Text>
     </soap:Reason>

我想要的是如何更改原因文本的区域设置 到其他语言?例如:fr 即:我怎样才能得到以下结果:

<soap:Reason>
        <soap:Text xml:lang="fr">Le service n’est pas accessible.</soap:Text>
     </soap:Reason>

1 个答案:

答案 0 :(得分:1)

问题已解决:)

经过数小时的调试后,我发现<soap:Text xml:lang="en">中使用的语言 在拦截器org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor中被硬编码 事实上,语言的价值是由内部类getLangCode()中定义的方法org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor.Soap12FaultOutInterceptorInternal决定的。 这里是用于获取语言的方法的代码,因为您可以看到它几乎将语言硬编码为en

  private String getLangCode() {        
            String code = LOG.getResourceBundle().getLocale().getDisplayLanguage();
            if (StringUtils.isEmpty(code)) {
                return "en";
            }
            return code;
            }

我使用的CXF版本是2.2.6,因为只支持java 5的遗留系统,我被迫使用它, 但是我发现这个问题是从版本2.6.7开始修复的 在此版本中,新属性lang已添加到超类org.apache.cxf.interceptor.Fault以指定语言。 在soap故障的代码中,这只需执行此操作:

fault.setMessage(reason);
fault.setLang("fr");

就是这样:))