我对Apache Camel提出请求。它被用作WS的传递。
请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="...">
<soapenv:Header/>
<soapenv:Body>
<urn:AddCompanyRequest>
<urn:Company>
<urn:Name>Ascii test ¢¢</urn:Name>
</urn:Company>
</urn:AddCompanyRequest>
</soapenv:Body>
</soapenv:Envelope>
不幸的是,非ASCII字符显示为“??”在WS外观。
WS Facade:
@Path("/company")
public interface CompanyFacade {
@POST
@Consumes("text/xml") // Already tried "text/xml; charset=utf-8"
@Produces("text/xml")
JAXBElement<StandardResponseType> add(AddCompanyRequestType addCompanyRequestType);
}
Camel配置:
<cxf:cxfEndpoint id="companyEndpoint" address="/company"
wsdlURL="service.wsdl"
loggingFeatureEnabled="false">
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD" />
</cxf:properties>
<cxf:outInterceptors>
<bean class="org.apache.camel.component.cxf.WriteXmlDeclarationInterceptor" />
</cxf:outInterceptors>
</cxf:cxfEndpoint>
(...)
<route>
<from uri="cxf:bean:companyEndpoint" />
<policy ref="customProvider">
<to
uri="validator:service.xsd?useDom=true" />
<choice>
<when>
<simple>${in.header.operationName} contains 'remove'</simple>
<setHeader headerName="restSlip">
<constant>removeCompanyURL</constant>
</setHeader>
</when>
<otherwise>
<setHeader headerName="restSlip">
<constant>companyURL</constant>
</setHeader>
</otherwise>
</choice>
<to uri="direct:dispatcher" />
</policy>
</route>
我尝试通过在不同阶段(RECEIVE,POST_MARSHAL,PRE_INVOKE)添加拦截器来调试Camel,但字符始终显示正确。
此外,我在各处验证了编码/ mime-type / charset,一切看起来都符合预期。
有谁知道为什么它仍然失败以及我能做些什么来解决这个问题?
注意:我在这个项目中使用Camel v2.12.2和Spring v3.2.4.RELEASE。