Apache Camel在SOAP请求中未正确处理非ASCII字符

时间:2017-05-18 14:02:54

标签: java apache soap cxf non-ascii-characters

我对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。

0 个答案:

没有答案