summaryrefslogtreecommitdiffstats
path: root/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/util/BpelUtil.java
blob: 33c0d544193ba059aaabe6581f578c81a3e715a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
 * Copyright 2011 IAAS University of Stuttgart <br>
 * <br>
 * 
 * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
 * 
 */
package de.unistuttgart.iaas.bpel.util;

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.evar.ExternalVariableModuleException;
import org.apache.ode.bpel.o.OScope.Variable;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


public class BpelUtil {
	
	/**
	 * This function writes a passed content to a specified processVariable
	 * (referenced by name). The content will be converted into its
	 * DOM-Representation for overwriting the processVariableContent (therefore
	 * it has to be XML-serializable, e.g. for complex data types there have to
	 * be JAX-B Annotations within the corresponding Class)
	 * 
	 * @param context ExtensionContext needed to access the processVariable
	 * @param content New content for the specified processVariable
	 * @param processVariableName Variable whose content has to be overwritten
	 * @throws FaultException
	 */
	public static void writeContentToBPELVariable(ExtensionContext context, Object content, String processVariableName, String wrapper) throws FaultException {
		// check the node
		System.out.println("The content object: " + content + "\n");
		// small hack for test
		Node hackNode = null;
		System.out.println("Trying to parse string to dom: " + ((String) content) + "\n");
		
		if (wrapper != null) {
			// a hack for simple type wrapper
			content = "<" + wrapper + ">" + (String) content + "</" + wrapper + ">";
		}
		try {
			hackNode = stringToDom((String) content);
		} catch (ParserConfigurationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (SAXException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		Variable bpelVariable = context.getVisibleVariables().get(processVariableName);
		if (hackNode == null) {
			System.out.println("hackNode is null! \n");
		}
		if (bpelVariable == null) {
			System.out.println("bpelVariable is null! \n");
		}
		try {
			// replaced responseAsNode to hackNode
			context.writeVariable(bpelVariable, hackNode);
		} catch (ExternalVariableModuleException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * This function writes a String to a BPEL Variable of type XSD-String
	 * 
	 * @param context ExtensionContext
	 * @param responsePayload ResponsePayload as String
	 * @param processVariableName Name of the target BPEL variable
	 * @throws FaultException
	 */
	public static void writeResponsePayloadToVariable(ExtensionContext context, Object responsePayload, String processVariableName, String wrapper) throws FaultException {
		BpelUtil.writeContentToBPELVariable(context, responsePayload, processVariableName, wrapper);
	}
	
	private static Node stringToDom(String xmlString) throws ParserConfigurationException, SAXException, IOException {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		DocumentBuilder builder = factory.newDocumentBuilder();
		InputSource is = new InputSource(new StringReader(xmlString));
		Document d = builder.parse(is);
		return d.getFirstChild();
	}
	
}