CXF - com.ctc.wstx.exc.WstxUnexpectedCharException: 非法字符 ((CTRL-CHAR, code 5))

4
我在网上发现问题是SOAP请求包含了“ctrl + v”的Unicode字符,这是XML中的非法字符。我不知道这个字符如何进入字符串,但我希望能够简单地在服务器端将其删除。
请问有人可以告诉我如何解决这个问题吗?我找到了以下代码段:
  XMLOutputFactory f = new WstxOutputFactory();
  f.setProperty(WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER,
    new InvalidCharHandler.ReplacingHandler(' '));
  XMLStreamWriter sw = f.createXMLStreamWriter(...);

有人可以告诉我如何配置Spring以构建带有此处理程序的WstxOutputFactory吗? - InvalidCharHandler.ReplacingHandler(' ')。感谢建议。
1个回答

8
解决方案非常简单:
    <jaxws:endpoint id="kservice"  
                    implementor="#kostrounService"
                    address="/call_kostroun" >
                    <jaxws:properties>
                           <entry key="javax.xml.stream.XMLOutputFactory"            valueref="xmlOutputFactory" />
                     </jaxws:properties>       
    </jaxws:endpoint> 
 <bean id="invalidCharHandler"   class="com.ctc.wstx.api.InvalidCharHandler$ReplacingHandler">
         <constructor-arg value=" "/>
   </bean>

   <bean id="xmlOutputFactory" class="com.ctc.wstx.stax.WstxOutputFactory"/>

   <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject">
            <ref local="xmlOutputFactory" />
        </property>
        <property name="targetMethod">
            <value>setProperty</value>
        </property>
        <property name="arguments">
            <list>
                 <util:constant static-field="com.ctc.wstx.api.WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER"/>
                 <ref bean="invalidCharHandler" />
            </list>
        </property>
    </bean>

这段配置代码可以移除SOAP消息中的非法字符,这样应用程序就可以正常运行了。;-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接