Java CXF如何设置原因标记的区域设置?
我有一个基于CXF的web服务。 当我使用CXF soap故障时,默认情况下,我得到的原因标记格式如下:Java CXF如何设置原因标记的区域设置?,java,web-services,cxf,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> 服务不方便。 我想要的是如何更改原因文本的区域设置 到其他语言?ex:fr ie:我怎样才能得到以下结果:
<soap:Reason>
<soap:Text xml:lang="en">Le service n’est pas accessible.</soap:Text>
</soap:Reason>
服务不方便。
我想要的是如何更改原因文本的区域设置
到其他语言?ex:fr
ie:我怎样才能得到以下结果:
<soap:Reason>
<soap:Text xml:lang="fr">Le service n’est pas accessible.</soap:Text>
</soap:Reason>
服务不方便。
问题已解决:)
经过数小时的调试,我发现
是在拦截器org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor中硬编码的
事实上,语言的值是由内部类org.apache.cxf.binding.soap.interceptor.soap12faultoutiterceptor.soap12faultoutiterceptorinternal中定义的方法getLangCode()
计算的
下面是用于获取语言的方法的代码,您可以看到它几乎将语言硬编码为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");
就这样:)