Forum Stats

  • 3,815,999 Users
  • 2,259,128 Discussions
  • 7,893,360 Comments

Discussions

How to set port range for data port in FTP Adapter over FTPS using TLS Explicit

SandyMx
SandyMx Member Posts: 12
edited Jan 20, 2017 10:58AM in SOA Suite Discusssions

Hello, i really need your help!

I'm trying to use the FTP adapter in a BPEL service to connect to an FTPS Server over TLS with Explicit mode. I understand, from what i have read, that explicit TLS connections need a command port (commonly 21) to stablish the initial connection, then FTP Server returns, among other stuff, a random data port (wich is in a predefined range) to start a new connection using this port to data exchange, when the exchange has finished, the connection to the data port is closed, but keeps the initial connection.

I've found this doc from MOS: Doc ID 2073857.1

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=323078634127558&id=2073857.1&_afrWindowMode=0&_adf.ctrl-…

Maybe i'm not understanding very well, but at the end of the document says the following statement:

In the customer's case they needed to allow inbound connections on a port not blocked by the firewall and a passive port range for the data port (secure port in the FTP adapter UI).

Wich makes me think that i can configure a port range for data port in FPT adapter property SecurePort. But i can't figure out if this is possible, and if yes, how can i set it. My actual allowed port range is from 1025 to 65532.

Some of the FTP Adapter properties are:

AuthenticationType: password

ConnectionMode:passive

DataChannelPort:

Host: myftphostname

Password:myftppassword

Port:21

SecurePort:990 (i've tryed several options here)

UseFtps:true

UseImplicitSSL:false

Username:myftpusername

UseSftp:false

I have tryed several options in the adapter properties with no success, it seem that is able to stablish the connection, but it can't get a file.

When invoke a Synchronous read operation (or list), the message i get is java.io.FileNotFoundException

<17/01/2017 05:47:00 PM CST> <Error> <oracle.soa.adapter> <BEA-000000> <JCABinding=>  ListarArchivosFTP:LeerArchivo [ SynchRead_ptt::SynchRead(Empty,body) ]  Could not invoke operation 'SynchRead' against the 'ftp' due to:

BINDING.JCA-11007

No hay datos que procesar.

No hay datos que procesar.

No se ha encontrado el archivo /Reports/myFile.txt para su procesamiento, no está disponible o no tiene contenido

Asegúrese de que el archivo existe en el directorio especificado.

>

<17/01/2017 05:47:00 PM CST> <Error> <oracle.soa.adapter> <BEA-000000> <JCABinding=>  [default/ListarArchivosFTP!1.0*soa_16f6e3d8-911c-4471-afe2-93662864d262.LeerArchivo]:SynchRead  Two-way operation SynchRead() failed>

<17/01/2017 05:47:00 PM CST> <Error> <oracle.soa.bpel.engine.ws> <BEA-000000> <got FabricInvocationException

** Cikey: 150028

** FlowId: 150005

** Current Activity Key: 150028-BpInv0-BpSeq0.3-3

** Current Activity Label: leerArchivoInvoke

** InvokeMessageGuid: d470b1fc-dd0c-11e6-b938-480fcf5706aa

** ComponentDN: default/ListarArchivosFTP!1.0*soa_16f6e3d8-911c-4471-afe2-93662864d262/ListarArchivosBPEL

** Properties for component ListarArchivosBPEL:

   ** bpel.config.oneWayDeliveryPolicy: async.persist

** Transaction info: Name=[EJB com.collaxa.cube.engine.ejb.impl.bpel.BPELDeliveryBean.handleInvoke(com.collaxa.cube.engine.dispatch.message.invoke.InvokeInstanceMessage)],Xid=BEA1-498272647C8DE50C6CCB(1135371878),Status=Active,numRepliesO

nUsed=true,doInit=false,'null',destroyed=false,poolname=SOADataSource,appname=null,moduleName=null,connectTime=184,dirtyIsolationLevel=false,initialIsolationLevel=2,infected=false,lastSuccessfulConnectionUse=1484696820344,secondsToTrustAnI

s/oracle/in-memory, SOADataSource_soa_domain, eis/webspheremq/Queue, eis/AQ/aqSample, eis/aqjms/EDNxaDurableTopic, eis/tibjmsDirect/Queue, eis/aqjms/Queue, eis/Apps/Apps, WLStore_soa_domain__WLS_soa_server1, WLStore_soa_domain_SOAJMSFileSt

** MaxThreadsConstraints: 150

** Total dispatcher messages scheduled for processing: 0

** Total number of threads processing dispatcher messages: 1

** Max Heap size: 1908932608

** Free Heap size: 965114288

java.io.FileNotFoundException:

        at java.io.FileInputStream.open0(Native Method)

        at java.io.FileInputStream.open(FileInputStream.java:195)

        at java.io.FileInputStream.<init>(FileInputStream.java:138)

        at java.io.FileInputStream.<init>(FileInputStream.java:93)

        at oracle.tip.adapter.ftp.FtpSSLManager.getKeyManagerFactory(FtpSSLManager.java:246)

        at oracle.tip.adapter.ftp.FtpSSLManager.getSSLSocketFactory(FtpSSLManager.java:341)

        at oracle.tip.adapter.ftp.FtpSocketFactory.<init>(FtpSocketFactory.java:202)

        at oracle.tip.adapter.ftp.FTP.connect(FTP.java:612)

        at oracle.tip.adapter.ftp.FTPClient.establishFtpSession(FTPClient.java:211)

        at oracle.tip.adapter.ftp.FTPAgent.login(FTPAgent.java:861)

        at oracle.tip.adapter.ftp.FTPAgent.preCall(FTPAgent.java:1425)

        at oracle.tip.adapter.ftp.FTPAgent.getBinaryFileAsStream(FTPAgent.java:488)

        at oracle.tip.adapter.ftp.FTPAgent.getContentAsStream(FTPAgent.java:534)

        at oracle.tip.adapter.ftp.inbound.FTPSource.getContents(FTPSource.java:850)

        at oracle.tip.adapter.ftp.inbound.FTPSource.getFileFromSource(FTPSource.java:762)

        at oracle.tip.adapter.file.outbound.FileReader.readFile(FileReader.java:414)

        at oracle.tip.adapter.file.outbound.FileReader.executeFileRead(FileReader.java:219)

        at oracle.tip.adapter.file.outbound.FileInteraction.executeFileRead(FileInteraction.java:334)

        at oracle.tip.adapter.ftp.outbound.FTPInteraction.execute(FTPInteraction.java:293)

        at oracle.integration.platform.blocks.adapter.fw.jca.cci.JCAInteractionInvoker.executeJcaInteraction(JCAInteractionInvoker.java:418)

        at oracle.integration.platform.blocks.adapter.fw.jca.cci.JCAInteractionInvoker.invokeJcaReference(JCAInteractionInvoker.java:780)

        at oracle.integration.platform.blocks.adapter.fw.jca.cci.JCAInteractionInvoker.invokeSyncJcaReference(JCAInteractionInvoker.java:682)

        at oracle.integration.platform.blocks.adapter.fw.jca.cci.JCAEndpointInteraction.performSynchronousInteraction(JCAEndpointInteraction.java:611)

        at oracle.integration.platform.blocks.adapter.AdapterReference.request(AdapterReference.java:220)

        at oracle.integration.platform.blocks.mesh.SynchronousMessageHandler.doRequest(SynchronousMessageHandler.java:151)

        at oracle.integration.platform.blocks.mesh.MessageRouter.request(MessageRouter.java:214)

        at oracle.integration.platform.blocks.mesh.MeshImpl.request(MeshImpl.java:301)

        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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

        at oracle.integration.platform.metrics.PhaseEventAspect.invoke(PhaseEventAspect.java:71)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

        at com.sun.proxy.$Proxy366.request(Unknown Source)

        at oracle.fabric.CubeServiceEngine.requestToMesh(CubeServiceEngine.java:1138)

        at com.collaxa.cube.ws.WSInvocationManager.invoke0(WSInvocationManager.java:261)

        at com.collaxa.cube.ws.WSInvocationManager.invoke(WSInvocationManager.java:331)

        at com.collaxa.cube.engine.ext.common.InvokeHandler.__invoke(InvokeHandler.java:1476)

        at com.collaxa.cube.engine.ext.common.InvokeHandler.handleNormalWSDLInvoke(InvokeHandler.java:811)

        at com.collaxa.cube.engine.ext.common.InvokeHandler.handleNormalInvoke(InvokeHandler.java:502)

        at com.collaxa.cube.engine.ext.common.InvokeHandler.handle(InvokeHandler.java:156)

        at com.collaxa.cube.engine.ext.bpel.common.wmp.BPELInvokeWMP.__executeStatements(BPELInvokeWMP.java:78)

        at com.collaxa.cube.engine.ext.bpel.common.wmp.BaseBPELActivityWMP$1.call(BaseBPELActivityWMP.java:197)

        at com.collaxa.cube.engine.ext.bpel.common.wmp.BaseBPELActivityWMP$1.call(BaseBPELActivityWMP.java:195)

        at com.collaxa.bpel.sws.SWSComponentProcessActivityWrapper$1.call(SWSComponentProcessActivityWrapper.java:74)

        at com.collaxa.bpel.sws.SWSCallableActivityWrapper.execute(SWSCallableActivityWrapper.java:89)

        at com.collaxa.bpel.sws.SWSComponentProcessActivityWrapper.execute(SWSComponentProcessActivityWrapper.java:82)

        at com.collaxa.cube.engine.ext.bpel.common.wmp.BaseBPELActivityWMP.perform(BaseBPELActivityWMP.java:205)

        at com.collaxa.cube.engine.CubeEngine.performActivity(CubeEngine.java:2878)

        at com.collaxa.cube.engine.CubeEngine._handleWorkItem(CubeEngine.java:1260)

        at com.collaxa.cube.engine.CubeEngine.handleWorkItem(CubeEngine.java:1155)

        at com.collaxa.cube.engine.dispatch.message.instance.PerformMessageHandler.handleLocal(PerformMessageHandler.java:92)

        at com.collaxa.cube.engine.dispatch.DispatchHelper.handleLocalMessage(DispatchHelper.java:300)

        at com.collaxa.cube.engine.dispatch.DispatchHelper.sendMemory(DispatchHelper.java:379)

        at com.collaxa.cube.engine.CubeEngine.endRequest(CubeEngine.java:4871)

        at com.collaxa.cube.engine.CubeEngine.endRequest(CubeEngine.java:4795)

        at com.collaxa.cube.engine.CubeEngine._createAndInvoke(CubeEngine.java:751)

        at com.collaxa.cube.engine.CubeEngine.createAndInvoke(CubeEngine.java:586)

        at com.collaxa.cube.engine.delivery.DeliveryService.handleInvoke(DeliveryService.java:723)

        at com.collaxa.cube.engine.ejb.impl.CubeDeliveryBean.handleInvoke(CubeDeliveryBean.java:478)

        at com.collaxa.cube.engine.ejb.impl.bpel.BPELDeliveryBean_5k948i_ICubeDeliveryLocalBeanImpl.__WL_invoke(Unknown Source)

        at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:33)

        at com.collaxa.cube.engine.ejb.impl.bpel.BPELDeliveryBean_5k948i_ICubeDeliveryLocalBeanImpl.handleInvoke(Unknown Source)

        at com.collaxa.cube.engine.dispatch.message.invoke.InvokeInstanceMessageHandler.handle(InvokeInstanceMessageHandler.java:43)

        at com.collaxa.cube.engine.dispatch.DispatchHelper.handleMessage(DispatchHelper.java:154)

        at com.collaxa.cube.engine.dispatch.BaseDispatchTask.process(BaseDispatchTask.java:150)

        at com.collaxa.cube.engine.dispatch.BaseDispatchTask.run(BaseDispatchTask.java:90)

        at com.collaxa.cube.engine.dispatch.WMExecutor$W.run(WMExecutor.java:236)

        at weblogic.work.j2ee.J2EEWorkManager$WorkWithListener.run(J2EEWorkManager.java:207)

        at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)

        at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)

        at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)

        at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)

        at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)

        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)

        at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)

>

I truly appreciate any help.

Tagged:

Best Answer

  • SandyMx
    SandyMx Member Posts: 12
    edited Jan 19, 2017 5:16PM Answer ✓

    I've found out my problem and a solution for it.

    This specific error stacktrace is launched because i didn't create and specifyed an Oracle Wallet, so the ftp adapter was unable to locate the .p12 file, pparently a wallet is required for the adapter can use FTPS over TLS.

    java.io.FileNotFoundException:

    at oracle.tip.adapter.ftp.FtpSSLManager.getKeyManagerFactory(FtpSSLManager.java:246)

    In order to solve the issue I created an Oracle Wallet file using orapki tool with the following command:

    orapki wallet create -wallet pathToTheWalletFile -pwd passwordForTheWallet -auto_login_local

    Then, in FTP adapter configuration i added the following property values:

    WalletLocation: pathToTheWalletFile/ewallet.p12

    WalletPassword: passwordForTheWallet

    Additional kwnoledge i've got from this research:

    There is no need to specify a range port in FTP adapter to enable FTPS over TLS, i think it uses all the other properties to identify the type. Internally, the adpater sends commands to the server using the Command port (commonly 21) and then it uses another commands like AUTH TLS, PBSZ, PROT P, CCC, PASV, etc. The PASV command gets the Server IP Address and a random port (Data Port) wich it uses to establish data connection for sending another commands in order to interact with remote files.

Answers

  • SandyMx
    SandyMx Member Posts: 12
    edited Jan 19, 2017 5:16PM Answer ✓

    I've found out my problem and a solution for it.

    This specific error stacktrace is launched because i didn't create and specifyed an Oracle Wallet, so the ftp adapter was unable to locate the .p12 file, pparently a wallet is required for the adapter can use FTPS over TLS.

    java.io.FileNotFoundException:

    at oracle.tip.adapter.ftp.FtpSSLManager.getKeyManagerFactory(FtpSSLManager.java:246)

    In order to solve the issue I created an Oracle Wallet file using orapki tool with the following command:

    orapki wallet create -wallet pathToTheWalletFile -pwd passwordForTheWallet -auto_login_local

    Then, in FTP adapter configuration i added the following property values:

    WalletLocation: pathToTheWalletFile/ewallet.p12

    WalletPassword: passwordForTheWallet

    Additional kwnoledge i've got from this research:

    There is no need to specify a range port in FTP adapter to enable FTPS over TLS, i think it uses all the other properties to identify the type. Internally, the adpater sends commands to the server using the Command port (commonly 21) and then it uses another commands like AUTH TLS, PBSZ, PROT P, CCC, PASV, etc. The PASV command gets the Server IP Address and a random port (Data Port) wich it uses to establish data connection for sending another commands in order to interact with remote files.

This discussion has been closed.