java - Apache cxf 3.1 SOAP 请求错误:“编码错误:INVALID_CHARACTER_ERR:指定了无效或非法的XML字符

标签 java xml spring cxf

我在执行肥皂请求时面临封送处理的问题。在soap UI上,它工作正常。当我应用ws安全性时会出现此问题。我正在使用Apache CXF-3.1.3。

以下是代码段。

final URL wsdlURL = DocUploadV1_Service.WSDL_LOCATION;
        DocUploadV1_Service ss = new DocUploadV1_Service(wsdlURL, DocUploadV1_Service.SERVICE);
        DocUploadV1 port = ss.getDocUploadV1SOAP();  
        final Client client = ClientProxy.getClient(port);
        final Endpoint cxfEndpoint = client.getEndpoint();
        Map<String, Object> outProps = new HashMap<String, Object>();
        outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
        outProps.put(WSConstants.USERNAME_LN,
                FlexPropertyConfigManager.getProperty(FlexConstants.OsbService.OSB_SERVICE_USER_NAME));
        outProps.put(WSHandlerConstants.USER,
                FlexPropertyConfigManager.getProperty(FlexConstants.OsbService.OSB_SERVICE_USER_NAME));
        outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);

        outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, OsbpsPasswordCallback.class.getName());

        WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
        cxfEndpoint.getOutInterceptors().add(wssOut);

        System.out.println("Invoking getStatus...");
        com.xerox.docuploadv1.GetStatusType _getStatus_getStatusInput = new com.xerox.docuploadv1.GetStatusType();
        com.xerox.docuploadv1.GetStatusRequestType _getStatus_getStatusInputGetStatusRequest = new com.xerox.docuploadv1.GetStatusRequestType();
        _getStatus_getStatusInputGetStatusRequest.setClientId("ClientId1603606510");
        _getStatus_getStatusInputGetStatusRequest.setParticipantId("ParticipantId1858678505");
        _getStatus_getStatusInputGetStatusRequest.setSource("Source-643654251");
        _getStatus_getStatusInputGetStatusRequest.setUserID_0020("UserID_0020692076008");
        _getStatus_getStatusInput.setGetStatusRequest(_getStatus_getStatusInputGetStatusRequest);
        com.xerox.docuploadv1.GetStatusResponseType _getStatus__return = port.getStatus(_getStatus_getStatusInput);
        System.out.println("getStatus.result=" + _getStatus__return);


如果删除ws安全性部分,则实际请求将执行并引发安全性错误,这是可以接受的。

大家知道应用安全性部分后为什么会出现此问题。

请帮助,我已经花了两天了。

完整的错误堆栈跟踪在这里

t org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:268) [cxf-rt-databinding-jaxb-3.1.3.jar:3.1.3]
    at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:237) [cxf-rt-databinding-jaxb-3.1.3.jar:3.1.3]
    at org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:136) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.wsdl.interceptors.BareOutInterceptor.handleMessage(BareOutInterceptor.java:68) [cxf-rt-wsdl-3.1.3.jar:3.1.3]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:324) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:277) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) [cxf-rt-frontend-simple-3.1.3.jar:3.1.3]
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139) [cxf-rt-frontend-jaxws-3.1.3.jar:3.1.3]
    at com.sun.proxy.$Proxy121.getStatus(Unknown Source)
    at com.infx.core.mobapp.wsbroker.OsbpsDocUploadStatusWS.getOsbpsDocStatus(OsbpsDocUploadStatusWS.java:189) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_80]
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:200) [cxf-rt-frontend-jaxrs-3.1.3.jar:3.1.3]
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99) [cxf-rt-frontend-jaxrs-3.1.3.jar:3.1.3]
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) [cxf-core-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268) [cxf-rt-transports-http-3.1.3.jar:3.1.3]
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_80]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_80]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_80]
Caused by: org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified. 


任何建议都会有所帮助。

最佳答案

XML具有非法字符,因此格式不正确。

应该做什么:


发送者必须修复XML。您的系统无法按原样对其进行处理。
面对这种可能性,您的系统应该很健壮。它应该捕获异常并优雅地响应发件人该请求是错误的,包括尽可能多的详细信息。

关于java - Apache cxf 3.1 SOAP 请求错误:“编码错误:INVALID_CHARACTER_ERR:指定了无效或非法的XML字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51849592/

相关文章:

java - Essentials Java GUI 构建 block ? IE。在 Swing 之上形成框架的库

java - 如何在多个参数上动态构建 JDO 查询

iphone - 从 iPad 以 base64 格式和大小限制上传图像

javascript - Chrome 上的 XML 错误但在 FF 上没问题?

java - 跟踪已处理的 jms 消息

java - Worker 上的数据库更改后 LiveData 未更新

java - Java EE/Jakarta EE 是否支持 Java 模块系统?是否可以使用 Java 模块系统制作 Web 应用程序?

xml - 检查 xml 节点是否不存在并做一些事情而不是失败

spring - 你能解释一下这个Spring环境变量解析吗?

java - 如何在单元测试中设置不同的类路径以使用 Spring 加载资源