Oracle BPEL: Modify files by using Base64decode & Base64encode in a BPEL process

In this blog I’ll show you have to read a file content in BPEL adding header and footer to the file.

To do this you need to decode the file first by using Base64decode in an embedded Java (see process activities)

First create a BPEL process and make sure that you have a simple process which can read a file by using file adapter from the server and can also write(by using file adapter) it to the server (See other blogs how to create such a process).

Your process will look like this:

Now we gonna do the real work.

1. To simplify the idea, we gonna add two extra variables to the process(you can also work directly with Read output parameter):

v_inputData and v_outputData of the type opaque:

2. once you have the variables you can assign the syncRead output parameter to v_inputData

3. now you can add a Java_Embedding activity to your process:

add the following java code

// Decode the file to be able to add a header text to the file. You can put in your java code calculations and other stuff as well. //

addAuditTrailEntry(“Base64decode started”);
String input_data=null;
try {
input_data = ((oracle.xml.parser.v2.XMLElement)getVariableData(“v_inputData”,”opaque”,”/ns4:opaqueElement”)).getFirstChild().getNodeValue();
//Replace the | char in the file
String decodedString = Base64Decoder.decode(input_data);

setVariableData(“v_outputData”,”opaque”,”/ns4:opaqueElement”,” Header tekst\n” + decodedString);
} catch (Exception e) {
addAuditTrailEntry(“Base64decode Exception: ” + e.getMessage());
} addAuditTrailEntry(“Base64decode ended”);

//Encode the file to let the fileadapter server be able to write the file to the sever//
addAuditTrailEntry(“Base64encode started”);
String input_str = null;
try {
input_str = ((oracle.xml.parser.v2.XMLElement)getVariableData(“v_outputData”,”opaque”,”/ns4:opaqueElement”)).getFirstChild().getNodeValue();
addAuditTrailEntry(“Base64encode input_str=”+input_str);
String encoded = null;
encoded = Base64Encoder.encode(input_str);
addAuditTrailEntry(“Base64encode encoded=”+encoded);
setVariableData(“Invoke_2_Write_InputVariable”,”opaque”,”/ns4:opaqueElement”,encoded);
} catch (Exception e) {
addAuditTrailEntry(“Base64encode Exception: “+e.getMessage());
}
addAuditTrailEntry(“Base64encode ended”);

4. remember that Invoke_2_Write_InputVariable is the invoke input of the write file adapter.

Deploy your application and test it. for any question drop me an email.

End op the this pot.

Oracle BPM-BPEL process with correlations

This blog describes a sample application for a POC about using correlations in BPM and BPEL.

Create a SOA project

20121122-123827.jpg

Add BPM technology to your project

20121122-124132.jpg

Create a BPM process with these components

20121122-174342.jpg

Create BPEL component. Select “Based on WSDL”.

20121122-174451.jpg

Add 2 input messages to your process. One to start the process and the other to continue the process.

20121122-174529.jpg

Expose as a SOAP service

20121122-174633.jpg

Add a Receive action to you process link it to client partnerLink.

20121122-174738.jpg

Assign the fromAdapter to the Receive action

20121122-174901.jpg

Create Correlation set

20121122-175040.jpg

Add property to the correlationSet

20121122-175120.jpg

Select de type as String

20121122-175155.jpg

Add 2 Aliases to the property one of message type startProcess(as created before) and the other as fromAdaprt(as created before)

20121122-175244.jpg

Add correlation to receiveInput in your BPELprocess and set initiate “Yes”

20121122-175316.jpg

Add correlation to Receive in your BPELprocess and set initiate “no”

20121122-175427.jpg

Add a request message type to the BPEL WSDL

20121122-175509.jpg

Back to BPM process define input string and assign it

20121122-175608.jpg

Configure the ThrowEvent

20121122-180536.jpg

Assign input message

20121122-180638.jpg

deploy and test your project.

Run process.service, you will see that it will have status running

20121122-180739.jpg

Run bpelprocess1_client.service with the same input as process.service. don’t forget to select the correct operation!

20121122-180804.jpg

Deploy and test your project.

· Start the BPM process.
· User soapUI to send input to the Master process.
· Master process saves input in the database and starts the correlation process.
· You should see in the BPM process that the process gets input.