Unable to parse XML String in Java snippet
Hi,
We have a business process that will process an XML document that we don't know the structure of at design time. So, we put the XML in a simple String variable. We do know the structure of the top section (header) of the XML and want to get the values of some elements in that section. Since I don't have a schema for the XML, I was trying to use a Java snippet that uses java.xml.parsers and org.w3c.dom to parse the string into DOM and then walk the DOM to the elements that I need to get their value, but BPEL is giving me a java.net.MalformedURLException runtime fault.
I can parse the same XML in standalone Java without error, so the XML seems fine. I'm not sure where the malformed URL is. Any help or suggestions about parsing XML that you don't have a schema for, is appreciated.
-Steve
BPEL version: 10.1.3.5
Here's my simple BPEL:
<assign name="Assign_1">
<copy>
<from variable="inputVariable" part="payload"
query="/client:SFProcessProcessRequest/client:SourceDoc"/>
<to variable="sSourceDoc"/>
</copy>
</assign>
<bpelx:exec import="org.w3c.dom.*"/>
<bpelx:exec import="javax.xml.parsers.*"/>
<bpelx:exec name="Java_Embedding_1" language="java" version="1.5">
<![CDATA[
String srcDoc = getVariableData("sSourceDoc").toString();
DocumentBuilderFactory fact = null;
DocumentBuilder builder = null;
Document doc = null;
fact = DocumentBuilderFactory.newInstance();
builder = fact.newDocumentBuilder();
try {
doc = builder.parse(sSrcDoc);
} catch (Exception e) {
addAuditTrailEntry("Builder Parsing Exception: " + e.getMessage());
throw e;
}
It fails at the point of builder.parse with exception message "no protocol:". The fault shown in BPEL Console is:
<Fault xmlns="http://schemas.oracle.com/bpel/extension" env="http://schemas.xmlsoap.org/soap/envelope/" >
<faultcode xmlns="" >:runtimeFault</faultcode>
<faultstring xmlns="" >business exception</faultstring>
<faultactor xmlns="" >cx-fault-actor</faultactor>
<detail xmlns="" >
<code>java.net.MalformedURLException</code>
<summary>no protocol: <TestFmsXml xmlns="http://com.testsoftware/fis/FaPO/2.0"> <XmlVersion>5</XmlVersion> <TestBuild>111.03</TestBuild> <SenderMemberId>6360</SenderMemberId> <ReceiverMemberId>6357</ReceiverMemberId> <Packages> <Package> <Name>Fms</Name> <Version>9</Version> </Package> <Package> <Name>ArPort</Name> <Version>39.1.4</Version> </Package> <Package> <Name>ArRpts</Name> <Version>16</Version> </Package> </Packages> </TestFmsXml></summary>
<detail>java.net.MalformedURLException: no protocol: <TestFmsXml xmlns="http://com.testsoftware/fis/FaPO/2.0"> <XmlVersion>5</XmlVersion> <TestBuild>111.03</TestBuild> <SenderMemberId>6360</SenderMemberId> <ReceiverMemberId>6357</ReceiverMemberId> <Packages> <Package> <Name>Fms</Name> <Version>9</Version> </Package> <Package> <Name>ArPort</Name> <Version>39.1.4</Version> </Package> <Package> <Name>ArRpts</Name> <Version>16</Version> </Package> </Packages> </TestFmsXml> at java.net.URL.<init>(URL.java:567) at java.net.URL.<init>(URL.java:464) at java.net.URL.<init>(URL.java:413) at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:233) at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:201) at oracle.xml.jaxp.JXDocumentBuilder.parse(JXDocumentBuilder.java:155) at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:146) at bpel.sfprocess.ExecLetBxExe2.execute(ExecLetBxExe2.java:118) at com.collaxa.cube.engine.ext.wmp.BPELXExecWMP.__executeStatements(BPELXExecWMP.java:50) at com.collaxa.cube.engine.ext.wmp.BPELActivityWMP.perform(BPELActivityWMP.java:200) at com.collaxa.cube.engine.CubeEngine.performActivity(CubeEngine.java:4327) at com.collaxa.cube.engine.CubeEngine.handleWorkItem(CubeEngine.java:1840) at com.collaxa.cube.engine.dispatch.message.instance.PerformMessageHandler.handleLocal(PerformMessageHandler.java:77) at com.collaxa.cube.engine.dispatch.DispatchHelper.handleLocalMessage(DispatchHelper.java:239) at com.collaxa.cube.engine.dispatch.DispatchHelper.sendMemory(DispatchHelper.java:344) at com.collaxa.cube.engine.CubeEngine.endRequest(CubeEngine.java:6439) at com.collaxa.cube.engine.CubeEngine.createAndInvoke(CubeEngine.java:1271) at com.collaxa.cube.engine.ejb.impl.CubeEngineBean.__createAndInvoke(CubeEngineBean.java:129) at com.collaxa.cube.engine.ejb.impl.CubeEngineBean.createAndInvoke(CubeEngineBean.java:172) at com.collaxa.cube.engine.ejb.impl.CubeEngineBean.syncCreateAndInvoke(CubeEngineBean.java:197) at sun.reflect.GeneratedMethodAccessor199.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.evermind.server.ejb.interceptor.joinpoint.EJBJoinPointImpl.invoke(EJBJoinPointImpl.java:35) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.JAASInterceptor$1.run(JAASInterceptor.java:31) at com.evermind.server.ThreadState.runAs(ThreadState.java:705) at com.evermind.server.ejb.interceptor.system.JAASInterceptor.invoke(JAASInterceptor.java:34) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.TxRequiresNewInterceptor.invoke(TxRequiresNewInterceptor.java:52) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.InvocationContextPool.invoke(InvocationContextPool.java:55) at com.evermind.server.ejb.StatelessSessionEJBObject.OC4J_invokeMethod(StatelessSessionEJBObject.java:87) at CubeEngineBean_LocalProxy_4bin6i8.syncCreateAndInvoke(Unknown Source) at com.collaxa.cube.engine.delivery.DeliveryHandler.initialRequestAnyType(DeliveryHandler.java:548) at com.collaxa.cube.engine.delivery.DeliveryHandler.initialRequest(DeliveryHandler.java:464) at com.collaxa.cube.engine.delivery.DeliveryHandler.request(DeliveryHandler.java:133) at com.collaxa.cube.ejb.impl.DeliveryBean.request(DeliveryBean.java:89) at sun.reflect.GeneratedMethodAccessor201.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.evermind.server.ejb.interceptor.joinpoint.EJBJoinPointImpl.invoke(EJBJoinPointImpl.java:35) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.JAASInterceptor$1.run(JAASInterceptor.java:31) at com.evermind.server.ThreadState.runAs(ThreadState.java:705) at com.evermind.server.ejb.interceptor.system.JAASInterceptor.invoke(JAASInterceptor.java:34) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.TxRequiredInterceptor.invoke(TxRequiredInterceptor.java:50) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52) at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119) at com.evermind.server.ejb.InvocationContextPool.invoke(InvocationContextPool.java:55) at com.evermind.server.ejb.StatelessSessionEJBObject.OC4J_invokeMethod(StatelessSessionEJBObject.java:87) at DeliveryBean_RemoteProxy_4bin6i8.request(Unknown Source) at com.collaxa.cube.ws.soap.oc4j.SOAPRequestProvider.processNormalOperation(SOAPRequestProvider.java:451) at com.collaxa.cube.ws.soap.oc4j.SOAPRequestProvider.processBPELMessage(SOAPRequestProvider.java:274) at com.collaxa.cube.ws.soap.oc4j.SOAPRequestProvider.processMessage(SOAPRequestProvider.java:120) at oracle.j2ee.ws.server.provider.ProviderProcessor.doEndpointProcessing(ProviderProcessor.java:958) at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:379) at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:481) at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:114) at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:96) at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:200) at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64) at oracle.security.jazn.oc4j.JAZNFilter$1.run(JAZNFilter.java:400) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at oracle.security.jazn.oc4j.JAZNFilter.doFilter(JAZNFilter.java:414) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:644) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:391) at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:908) at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:458) at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313) at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199) at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260) at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303) at java.lang.Thread.run(Thread.java:595) </detail>
</detail>
</Fault>
Edited by: SteveF-Fresno on Aug 18, 2010 4:41 PM