我有一个基于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>
答案 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");
就是这样:))