簡體   English   中英

從Spring Boot App在Weblogic Server上調用SOAP服務時出現ClassCastException

[英]ClassCastException When Calling SOAP Services on Weblogic Server from Spring Boot App

我正在Spring Boot中開發REST服務,我必須使用他們提供的SOAP服務將數據上傳到Oracle Fusion服務器。 該應用程序在Tomcat服務器中運行良好,但當部署到Weblogic時,我面臨一個類強制轉換異常。

HCMDataLoader loaderPort = getHcmDataLoaderPort(hcmDataLoader);
BindingProvider wsbp = (BindingProvider) loaderPort;

Binding binding = wsbp.getBinding();
List<Handler> handlerChain = binding.getHandlerChain();
handlerChain.add(new SoapHandler());
binding.setHandlerChain(handlerChain);
Map<String, Object> requestContext = wsbp.getRequestContext();
requestContext.put("javax.xml.ws.security.auth.username", username);
requestContext.put("javax.xml.ws.security.auth.password", password);
String parameters = "ImportMaximumErrors=100,LoadMaximumErrors=100,LoadConcurrentThreads=4,DeleteSourceFile=N";
contentIdValue = loaderPort.importAndLoadData(contentId.trim(), parameters);
public static HCMDataLoader getHcmDataLoaderPort(String dataLoaderUrl) throws Exception {
        try {
            if (hcmDataLoaderPort != null) {
                return hcmDataLoaderPort;
            } else {
                URL url = new URL(dataLoaderUrl);

                hcmDataLoaderService = new HCMDataLoader_Service(url,
                        new QName(
                                "http://xmlns.oracle.com/apps/hcm/common/dataLoader/core/dataLoaderIntegrationService/",
                                "HCMDataLoader"));
                SecurityPolicyFeature[] m_securityFeature = new SecurityPolicyFeature[] {
                        new SecurityPolicyFeature("oracle/wss_username_token_over_ssl_client_policy") };
                hcmDataLoaderPort = hcmDataLoaderService.getHCMDataLoaderSoapHttpPort(m_securityFeature);
                return hcmDataLoaderPort;
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

下面是我在Weblogic服務器上運行此代碼時獲得的堆棧跟蹤。

java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.SOAPDocumentImpl cannot be cast to oracle.j2ee.ws.saaj.soap.SOAPDoc
        at weblogic.wsee.jaxws.WLSContainer$WLSSAAJFactory.readAsSAAJ(WLSContainer.java:1061)
        at com.sun.xml.ws.api.message.saaj.SAAJFactory.read(SAAJFactory.java:208)
        at com.sun.xml.ws.message.AbstractMessageImpl.toSAAJ(AbstractMessageImpl.java:236)
        at com.sun.xml.ws.api.message.MessageWrapper.readAsSOAPMessage(MessageWrapper.java:176)
        at com.sun.xml.ws.handler.SOAPMessageContextImpl.getMessage(SOAPMessageContextImpl.java:85)
        at weblogic.wsee.jaxws.framework.jaxrpc.SOAPMessageContext.getMessage(SOAPMessageContext.java:260)
        at weblogic.wsee.security.wssp.handlers.WssHandler.getSecurityContext(WssHandler.java:321)
        at weblogic.wsee.security.wssp.handlers.WssHandler.setupSecurityContext(WssHandler.java:291)
        at weblogic.wsee.security.wssp.handlers.WssHandler.getSecurityPolicyDriver(WssHandler.java:270)
        at weblogic.wsee.security.wssp.handlers.WssClientHandler.processRequest(WssClientHandler.java:66)
        at weblogic.wsee.security.wssp.handlers.WssHandler.handleRequest(WssHandler.java:112)
        at weblogic.wsee.jaxws.framework.jaxrpc.TubeFactory$JAXRPCTube.processRequest(TubeFactory.java:234)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)
        at com.sun.xml.ws.client.Stub.process(Stub.java:463)
        at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:191)
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:92)
        at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:161)
        at com.sun.proxy.$Proxy474.importAndLoadData(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at weblogic.wsee.jaxws.spi.ClientInstanceInvocationHandler.invoke(ClientInstanceInvocationHandler.java:147)
        at com.sun.proxy.$Proxy475.importAndLoadData(Unknown Source)
        at com.payslip.util.elemententry.beans.UploadToUcmBean.processFileFromUCM_HDLService(UploadToUcmBean.java:203)
        at com.payslip.util.elemententry.beans.UploadToUcmBean.beginUploadToUCM(UploadToUcmBean.java:293)
        at com.payslip.util.elemententry.beans.UploadToUcmBean.run(UploadToUcmBean.java:350)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

我不認為實現有任何問題,因為在Tomcat上部署時相同的應用程序運行正常,但在Weblogic上運行時失敗。

--------------------------

編輯:19-04-2019正如Roman下面提到的,我嘗試編輯weblogic.xml,現在它正在拋出NPE。

<wls:prefer-application-resources>
    <wls:resource-name>javax.xml.soap.MessageFactory</wls:resource-name>
    <wls:resource-name>javax.xml.soap.MetaFactory</wls:resource-name>
    <wls:resource-name>javax.xml.soap.SOAPConnectionFactory</wls:resource-name>
    <wls:resource-name>javax.xml.soap.SOAPFactory</wls:resource-name>
</wls:prefer-application-resources>

添加這個后,我得到低於空指針。

java.lang.NullPointerException
        at weblogic.wsee.security.saml.SAMLTrustCredentialProvider.getCredentialFromRSTR(SAMLTrustCredentialProvider.java:784)
        at weblogic.wsee.security.saml.SAMLTrustCredentialProvider.createCredential(SAMLTrustCredentialProvider.java:727)
        at weblogic.wsee.security.saml.SAMLTrustCredentialProvider.getCredentialSTSCSS(SAMLTrustCredentialProvider.java:213)
        at weblogic.wsee.security.saml.SAMLTrustCredentialProvider.getCredential(SAMLTrustCredentialProvider.java:121)
        at weblogic.xml.crypto.wss.WrapperCredentialProvider.getCredential(WrapperCredentialProvider.java:55)
        at weblogic.xml.crypto.wss.SecurityBuilderImpl.getCredential(SecurityBuilderImpl.java:778)
        at weblogic.xml.crypto.wss.SecurityBuilderImpl.getSecurityToken(SecurityBuilderImpl.java:751)
        at weblogic.xml.crypto.wss.SecurityBuilderImpl.addSecurityToken(SecurityBuilderImpl.java:287)
        at weblogic.wsee.security.wss.plan.SecurityMessageArchitect.doProcessIdentity(SecurityMessageArchitect.java:927)
        at weblogic.wsee.security.wss.plan.SecurityMessageArchitect.processIdentity(SecurityMessageArchitect.java:893)
        at weblogic.wsee.security.wss.plan.SecurityMessageArchitect.constructMessage(SecurityMessageArchitect.java:188)
        at weblogic.wsee.security.wss.plan.SecurityMessageArchitect.buildWssMessage(SecurityMessageArchitect.java:141)
        at weblogic.wsee.security.wss.plan.SecurityMessageArchitect.buildWssMessage(SecurityMessageArchitect.java:124)
        at weblogic.wsee.security.wss.SecurityPolicyArchitect.processOutbound(SecurityPolicyArchitect.java:227)
        at weblogic.wsee.security.wss.SecurityPolicyArchitect.processMessagePolicy(SecurityPolicyArchitect.java:135)
        at weblogic.wsee.security.wss.SecurityPolicyConductor.processRequestOutbound(SecurityPolicyConductor.java:117)
        at weblogic.wsee.security.wss.SecurityPolicyConductor.processRequestOutbound(SecurityPolicyConductor.java:89)
        at weblogic.wsee.security.wssp.handlers.WssClientHandler.processOutbound(WssClientHandler.java:115)
        at weblogic.wsee.security.wssp.handlers.WssClientHandler.processRequest(WssClientHandler.java:67)
        at weblogic.wsee.security.wssp.handlers.WssHandler.handleRequest(WssHandler.java:112)
        at weblogic.wsee.jaxws.framework.jaxrpc.TubeFactory$JAXRPCTube.processRequest(TubeFactory.java:234)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)
        at com.sun.xml.ws.client.Stub.process(Stub.java:463)
        at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:191)
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:92)
        at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:161)
        at com.sun.proxy.$Proxy474.importAndLoadData(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at weblogic.wsee.jaxws.spi.ClientInstanceInvocationHandler.invoke(ClientInstanceInvocationHandler.java:147)
        at com.sun.proxy.$Proxy475.importAndLoadData(Unknown Source)
        at com.payslip.util.elemententry.beans.UploadToUcmBean.processFileFromUCM_HDLService(UploadToUcmBean.java:203)
        at com.payslip.util.elemententry.beans.UploadToUcmBean.beginUploadToUCM(UploadToUcmBean.java:293)
        at com.payslip.util.elemententry.beans.UploadToUcmBean.run(UploadToUcmBean.java:350)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

我認為在Weblogic和使用JDK類的庫之間存在SAAJ實現的沖突。 嘗試在應用程序中添加或編輯資源/WEB-INF/weblogic.xml:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd">
  <container-descriptor>
    <prefer-application-resources>
     <resource-name>META-INF/services/javax.xml.soap.MessageFactory</resource-name> 
     <resource-name>META-INF/services/javax.xml.soap.MetaFactory</resource-name> 
     <resource-name>META-INF/services/javax.xml.soap.SOAPConnectionFactory</resource-name> 
     <resource-name>META-INF/services/javax.xml.soap.SOAPFactory</resource-name 
    </prefer-application-resources>
  </container-descriptor>
</weblogic-web-app>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM