Monday 6 May 2013

Not able to access OSB proxy service WSDL- 500 internal server error

While accessing the Proxy Service WSDL in browser throws 500 Internal Server Error..

 

When and how this error occurs: Steps to reproduce


1. Create a wsdl based proxy service and enable 'Enforce WS-I Compliance' for it.  

 

2. Suppose the endpoint of the proxy is '/default/wsdlBasedProxy'.   

 

3. View wsdl for this proxy service, I mean access
'http://<host name>:<port number>/default/wsdlBasedProxy?wsdl'. 

There is a NullPointerException in server log, see message below: 

------------------------------------------------------------------

 ]] Root cause of ServletException.
java.lang.NullPointerException
at weblogic.servlet.internal.ServletResponseImpl.sendContentError(ServletResponseImpl.java:622)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:666)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
at com.bea.wli.sb.transports.http.wls.HttpTransportServlet$1.sendError(HttpTransportServlet.java:123)
at com.bea.wli.sb.transports.http.generic.RequestHelperBase.wsiCompliant(RequestHelperBase.java:205)
at com.bea.wli.sb.transports.http.generic.RequestHelperBase.service(RequestHelperBase.java:80)
at com.bea.wli.sb.transports.http.wls.HttpTransportServlet.service(HttpTransportServlet.java:129)
at weblogic.servlet.FutureResponseServlet.service(FutureResponseServlet.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)



Workaround


1. Login to Service Bus Console

 

2. Create a Session and go to the Proxy Service Configuration Tab


3. Uncheck Enforce WS-I compliance on the proxy configuration.

 

4. Save the changes and activate the session.

 

Permanent Fix to this issue


1. Click Patches & Updates Tab on the support portal(support.oracle.com) .


2. Provide 13979537 for the Patch Set Number search criteria and click the Search button.


3. This brings up a row with the Patch details like Patch Name, Description,Release..etc


4. Click the Patch Name link(for eg 13979537 in your case)


5. Please confirm that you are downloading the Patch for OSB version 11.1.1.6.0


6. This brings up a popup. Click Read Me on the popup and this opens up a ReadMe document  which has step by step instruction to apply the patch.


7. Please apply the patch on test environment and if it solves the issue you can migrate the patch to other environment as well. 



 

Wednesday 1 May 2013

Unable to call a Business Rule Before an Initiator Task in a BPM Composite

We use Oracle BPM Studio to develop BPM Composites.

JDeveloper needs a BPM Plugin/Extension before you can start designing a BPM process.

Various plugin/extension available for JDeveloper could be downloaded here.

 

Quiet Often a BPM process starts with an Initiator task. The purpose of this task is to start an instance of the BPM Process at runtime. This task is also responsible for recieving the necessary inputs from the client process which is needed to start the BPM Process.

 

 

A typical requirement could be to execute Business Rules Task before the Initiator task of a BPM 11g Process. 

 

And why would you like to do that?

 

 

Your implementation might require to get the User local and language preferences from a Centralized rules repository even before a Business Process instance starts. 

 

 

The simplest and obvious way to achieve this is to store all user's locale and preference information in a repository and fetch it at run-time based on the user's credential automatically, even before user supplies any input and starts the business process

 

Now here's the problem

 

Generally a Business Rules Task works fine if placed anywhere else in the BPM process but if you try to use it before Initiator Task, It fails with the following exception and a faulted instance is seen in Enterprise Manager

 

------------------------------------------------------------------------------------------------------------------------

javax.xml.xpath.XPathExpressionException: ORABPEL-77005 Uninitialized data element.
DataOutput minuteSheetObject is not initialized in flow element Initiator Rule.
Make sure to initialize DataOutput minuteSheetObject before using it in flow element Initiator Rule.

------------------------------------------------------------------------------------------------------------------------


Workaround

If this issue is impacting your implementation you can try these steps as a workaround

 

 

Try to replace the Initiator Human task by a newly created human task of Initiator Type.(The main difference is that the parameter was defined when the human task was created and not by adding it to the existing human task (Step 4-5 below)


1. Edi the properties of the activity "Initiator task"
2. Click on the "Implementation" tab
3. Click on the green "+" near the Human Task. A "Create new Human task" dialog pops up.
4. Click on the "+" near the "Parameters" to add a new parameter .
5. Drag the "minuteSheetObject " instance variable to the parameters list and check the "Editable" checkbox.  Click ok  twice.
6. Complete the flow and deploy the project
7. Test the project with a sample payload.