나는 Woodstox의 DeserializationException에 부딪치기 전에 프록시 서비스의 SOAP 응답을 변경/제거하는 솔루션을 찾고자했습니다. 아래는 제가 얻는 예외입니다.프록시 SOAP 서비스 응답에서 CTRL-CHAR을 제거하도록 Spring/Woodstox jaxws를 구성하는 방법
이것은 그래서 톰캣,
는 WSDL을하고 자바 데스크톱 응용 프로그램입니다 : CTRL-CHAR의 같은 straigt 답변을 제공하기 전에 몇 가지 사실 사용자 정의 SOAP 메시지 핸들러를 생성, XML에 유효하지 않습니다
<bean id="serviceProxy" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"> <property name="serviceInterface" value="local generated stub"/> <property name="wsdlDocumentUrl" value="--wsdl URL--"/> <property name="namespaceUri" value="urn:address"/> <property name="serviceName" value="proxyService"/> <property name="portName" value="Some_Wsi_HandlerPort"/> <property name="lookupServiceOnStartup" value="false" /> </bean>
웹 서비스 클라이언트 구성은 다음과 같다 JAX-WS RI를 통해 생성된다
나는 다음과 같은 구성을 시도했지만 작동하지 않았다 :
<jaxws:client id="localService">
<jaxws:properties>
<entry key="javax.xml.stream.XMLOutputFactory">
<ref bean="xmlOutputFactory"/>
</entry>
</jaxws:properties>
</jaxws:client>
<bean id="invalidCharHandler" class="com.ctc.wstx.api.InvalidCharHandler$ReplacingHandler">
<constructor-arg value=" "/>
</bean>
<bean id="xmlOutputFactory" class="com.ctc.wstx.stax.WstxOutputFactory"/>
<beanclass="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<ref bean="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>
내가 또한 사용자 SOAPHandler 및 LogicalHandler을 만드는 시도했지만 그들은 도움이되지 않았다.
응답 본문에서 유니 코드 문자를 대체하고 응답 본문을 manupulating 한 후에이를 소비하는 방법이 있다는 것을 알고 있지만 위의 WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER 구성 에서처럼 필터를 찾고 있습니다. (요청을 깨고이 프록시 서비스에 응답하지 않고, Woodstox 또는 Spring 또는 오류를 던지고 통신을 끊기 전에 응답에서 유효하지 않은 문자를 필터링하도록 사용자 정의 할 수있는 모든 것을 원합니다.
org.springframework.remoting.RemoteAccessException : [null]에서 원격 서비스에 액세스 할 수 없으며 중첩 예외는 com.sun.xml.ws.encoding.soap.DeserializationException : Fa입니다. 응답을 읽으려고했는지 여부 : - 링크 예외 : [com.ctc.wstx.exc.WstxUnexpectedCharException : 잘못된 문자 ((CTRL-CHAR, 코드 31)) at [row, col { 알 소스}] [91,222] org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.invoke에서 org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke (JaxWsPortClientInterceptor.java:565) 에서 (JaxWsPortClientInterceptor.java:541) com.sun.proxy에서 org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:207) 에서 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) 에서 . $ Proxy42 .salesOrderInfo (알 수없는 소스)
어떻게 구성에 java.io.FilterInputStream 구현을 삽입 할 수 있습니까? – UCJava
@UCJava 불행히도 나는 실제적인 호출 (당신이하지 않는 것처럼 들린다)을 제어하지 않으면, 그것에 대한 답을 모른다. 따라서 올바른 형식의 XML 제어 문자를 서버에 제공하는 방법을 알아 내야 할 수도 있습니다. 따라서 콘텐츠를 생성하는 사람은 무엇이든 정의에 따라 XML이 아닙니다. – StaxMan