Invoking the Servlet through HttpAdapter with xml input/output in Oracle SOA Suite
Sometimes we may require invoking the Java servlet with XML
as input/output; this blog will explain how to invoke the servlet with XML as
input/output through HttpAdapter in Oracle SOA Suite 11g. The same will work in Oracle SOA Suite 12c - the screens will be little different.
The sample java servlet will receive the emp name and emp no
as XML input and return the employee details as XML output.
Defining the HttpAdapter to invoke the servlet:
- Create a composite with Synchronous BPEL
- Define the HttpAdapter as shown below
- Make sure the configuration are defined as below
- Define the Input/output schema as per the requirement.
- Deploy the composite
Retrieving the XML in Servlet:
The below code snippet will help us to retrieve the XML
payload in the Servlet
public void
doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter
out = response.getWriter();
BufferedReader
br = request.getReader();
String
line = null;
StringBuffer inputXML = new StringBuffer();
PrintWriter pout = response.getWriter();
while
((line = br.readLine()) != null) {
inputXML.append(line);
}
br.close();
System.out.println("Input "+inputXML);
java.io.InputStream sbis = new
java.io.StringBufferInputStream(inputXML.toString());
javax.xml.parsers.DocumentBuilderFactory b =
javax.xml.parsers.DocumentBuilderFactory.newInstance();
b.setNamespaceAware(false);
org.w3c.dom.Document doc = null;
javax.xml.parsers.DocumentBuilder
db = null;
try {
db =
b.newDocumentBuilder();
doc =
db.parse(sbis);
} catch
(Exception e) {
e.printStackTrace();
}
org.w3c.dom.Element element = doc.getDocumentElement();
String
empName=getPayloadValue(element, "EmpName");
String
empNo=getPayloadValue(element, "EmpNo");
String
output="<EmployeeCollection xmlns=\"http://xmlns.oracle.com/HttpAdapter/InvokeServlet/InvokeServlet\"><Employee><EmpName>"+empName+"</EmpName><EmpNo>"+empNo+"</EmpNo><EmpAge>27</EmpAge></Employee><Employee><EmpName>"+empName+"</EmpName><EmpNo>"+empNo+"</EmpNo><EmpAge>28</EmpAge></Employee></EmployeeCollection>";
out.write(output);
out.close();
}
public String
getPayloadValue(Element taskPayloadElement, String nodeName){
String output=
"";
NodeList nodeList
= taskPayloadElement.getElementsByTagName(nodeName);
if(nodeList!=null
&& nodeList.getLength() > 0){
Element myElement
= (Element)nodeList.item(0);
output=
myElement.getFirstChild().getNodeValue();
}
return output;
}
Testing:
DOWNLOAD HttpService.rar
No comments:
Post a Comment