Please login or register to access secure site features.

Note: By continuing to use DevConnect Program Services you agree to our latest Registered Member Terms.

Sign in using DevConnect ID

Forgot password?

Trouble logging in?

Submit a ticket for Registration Support.

I have an SSO ID

?
sign in

Don't have a DevConnect or SSO ID ?

Create a DevConnect account or join the program.

register now
^
Messages posted by: MichaelDailous_deprecated
Forum Index » Profile for MichaelDailous_deprecated » Messages posted by MichaelDailous_deprecated
Message
So the hack I implemented didn't work. I've also added servlets to delete any collection via the "IVariable.removeCollection()" method (because there is no "Remove Collection" pallet item. Immediately after calling this remove collection method, check to see if the variable is a collection, and it still is, so the removeCollection() method isn't working as expected. Is there something special that I have to do once I remove the collection? Is it possible to get a patch that checks the size of the collection, and if the size is 0, don't do anything. That may be a viable solution. At this point, the application is failing, the caller is hearing "The system is experiencing technical difficulties" and the application hangs up, which is extremely bad.
OD 7.1.0.1201

Honestly, I have no idea why it's a collection. It's a complex variable, yes. But if there's nothing to assign to the variable, the module simply returns immediately. That's what's got me scratching my head. I've been working this issue for the past week or so and have attempted various hacks to get parts of the system to work. Is it possible the Data Modules are keeping previous session variable values in memory somehow? I wouldn't think so, but... so many parts and pieces now with OD, Tomcat, etc etc

I'm going through all of the code now and changing it to assign a the dash character as the default value for all the variables. If nothing gets assigned during the module execution, that default value is returned. All the locations where I'm checking isEmpty, I'm updating to instead check "NotEqual". This requires additional code to clear out the default values so there's no domino effect down line. Definitely not elegant, but it appears to work.
Thanks for confirming it's a bug.

A) The entire architecture was built around the use of Data Modules, with about 20 modules currently developed. is there an easy way to "use a subdialog" without re-creating each module?

B) I'm not making it a collection. If there is no variable to return, I return nothing. I have no idea why the receiving end is attempting to make it a collection. How can I "remove a collection" that I'm not creating?

C) How do I "get a patch"?
All of our Data Project modules are throwing the following error when one of the output variables contains no value.

17/08/2017 17:52:51:028 ERROR - 507A96375898A3B41AF9EFFAE5390F80:/ITSMTktStat : session id:usea-epuat1-2017229175245-3 |
 EXCEPTION>
java.lang.IllegalStateException:  EXCEPTION>
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.rangeCheck(ArrayList.java:653)
        at java.util.ArrayList.get(ArrayList.java:429)
        at com.avaya.sce.runtime.ComplexCollection.next(ComplexCollection.java:100)
        at com.avaya.sce.runtimecommon.CallCopyHandler.copyRefToRef(CallCopyHandler.java:56)
        at com.avaya.sce.runtime.Return$1.copyParams(Return.java:278)
        at com.avaya.sce.runtimecommon.CallFrame.copyOutputParams(CallFrame.java:43)
        at com.avaya.sce.runtimecommon.SCESession.popFrame(SCESession.java:1104)
        at com.avaya.sce.runtime.SCEServlet.requestHandler(SCEServlet.java:187)
        at com.avaya.sce.runtime.SCEServlet.doPost(SCEServlet.java:148)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

        at com.avaya.sce.runtime.ComplexCollection.next(ComplexCollection.java:108)
        at com.avaya.sce.runtimecommon.CallCopyHandler.copyRefToRef(CallCopyHandler.java:56)
        at com.avaya.sce.runtime.Return$1.copyParams(Return.java:278)
        at com.avaya.sce.runtimecommon.CallFrame.copyOutputParams(CallFrame.java:43)
        at com.avaya.sce.runtimecommon.SCESession.popFrame(SCESession.java:1104)
        at com.avaya.sce.runtime.SCEServlet.requestHandler(SCEServlet.java:187)
        at com.avaya.sce.runtime.SCEServlet.doPost(SCEServlet.java:148)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)


The data node following the Data project call "isEmpty" on the variables to check if they contain a value. What could be causing this problem?
Please provide some information regarding the "asMedia" boolean value for a PromptElement. Specifically:

A> What is it?
B> What does it do?
C> How does it affect the value that is passed in?
D> Are there any examples of it's use?
We used REST also, not SOAP. My mistake with referencing SOAP UI, I'm debugging multiple issues on multiple machines with multiple systems. For this issue, we use Burp Suite to capture the stream.
Hmmm, then something else is going on somewhere. This same test was conducted on 2 separate installations of Orchestration Designer 7.1.0.12, on 2 separate computers, in 2 separate countries. One in the U.S. and one in India. Both results were identical. The only difference between the successful and unsuccessful test is removing the key from the ddrt.properties file. This also seems to coincide with the error message:

Fatal Error : caught exception [java.lang.NullPointerException] while trying to report applicaiton exception [javax.servlet.ServletException: EXCEPTION>


To me, this says that because the key doesn't exist, the framework can't determine whether or not to report the exception (properties.getProperty(String) can return null if the key doesn't exist). Our logs show this as well. In the fail log, after the web request is sent, the result comes back as a 401 (as demonstrated by SOAP UI interception), and the application terminates (AvayaDisconnectHandler). In the success log, the web service is sent, the result comes back as 401, and the application re-prompts the caller as the programming directs. Again, since the only difference between the successful and unsuccessful tests is the removal of the key from the properties file, this seemed like a logical deduction.

Since adding the key to the ddrt.properties file is our solution, consider this thread is resolved. Thank you for your time. :)
It's not whether or not the key is enabled, it's whether or not the key exists. Delete the key from the ddrt.properties file, run your example, and let me know if it works the same. That is the only change in my test, the key exists in the properties file for the successful test, the key was deleted from the properties file for the unsuccessful test.
Sounds good. If it helps, the only change is the inclusion/exclusion of the ddrt.properties showcaughtexceptions key. If the key is there, everything works beautifully. If the key is not there, things break down pretty fast. Let me know if you want a sample app and a rest service that returns the dreaded 401 unauthorized response. This isn't urgent for our development. I'll ensure the key exists in the properties file and there's no issues. Hopefully, if someone else runs into this rare issue, they'll find this thread. :)

Thanks again Ross.
Michael
Sorry Ross. It's been a busy week. I've attached a lot of the exception that's thrown when the entry is missing. Not sure why it wasn't in the other log. In the original logs I sent over, you can see the web service request goes out, then the AvayaDisconnect node is executed. The exception in this log is what happens at that point.

Let me know if you need anything else. :)
Thanks,
Michael
I have uncovered what I believe to be a bug in the REST implementation for Orchestration Designer. It's an odd situation, not one that is common, I feel pretty sure about that. in a special situation, if the REST response contains a non-200 HTTP code, an exception is thrown that cannot be handled by the Orchestration Designer application and the call dies abruptly.

The special situation is when there is no showcaughtexceptions key in the data/ddrt.properties file. In this situation, the Orchestration Designer application will throw a NullPointerException, wrapped in a ServletException, wrapped in a RuntimeException. This exception is handled outside the Orchestration Designer application so the Orchestration Designer application has no opportunity to handle the error. As a result, the call simply dies. See the attached 401-Exception.txt file that shows the exception in the trace.

When the showcaughtexceptions key exists in the data/ddrt.properties file, the non-200 response can be appropriately handled by the Orchestration Designer application. See the 401-Success.txt file that shows the complete trace.

The same application was used for both of these tests, with the only difference between the 2 is the exclusion/inclusion of the showcaughtexceptions key in the data/ddrt.properties file. The REST web service operation in question is wrapped in a try/catch in both situations. Only the situation which includes the showcaughtexceptions key in the data/ddrt.properties file is handled correctly within the application.

I can provide a simple REST web service that returns a 401 unauthorized code and a sample application is necessary. It will take a couple of hours to setup, but I can have it to you tomorrow. Let me know either way.

Michael
I ended up removing the runtimeversioncheck endpoint and there's no longer an error. I added the jar as an "item" to the pluggableconnector endpoint and the jar file gets copied to the TOMCAT_LIB directory on use.

This works, not sure why it was throwing the error. I used another project that performs the same functions as a template, and even copied most of the code. Anyway, it's working.
Here is my plugin.xml file:

<!--BEGIN CUT-->
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="com.avaya.sce.core.runtimeversioncheck">
<provider
class="com.unisys.od.pdc.versions.SecurityManagerRuntimeVersionCheck"
id="com.unisys.sce.secmgr.RuntimeVersionCheck">
</provider>
</extension>
<extension
point="com.avaya.sce.core.pluggableConnector">
<configuration
category="UnisysNG"
connectorId="com.unisys.od.pdc.secmanager"
displayName="Security Manager Connector"
icon="icons/icon_32x32.png"
visible="true"
visible_enabled="false">
<target_nature
value="com.avaya.sce.core.speechnature">
</target_nature>
<target_nature
value="com.avaya.sce.core.messageflownature">
</target_nature>
<target_nature
value="com.avaya.sce.email.emailnature">
</target_nature>
<target_nature
value="com.avaya.sce.sms.smsnature">
</target_nature>
<target_nature
value="com.avaya.sce.core.datanature">
</target_nature>
<target_nature
value="com.avaya.sce.core.webnature">
</target_nature>
<item
destination="PROJECT_WEBINF"
resourceName="lib/unisys-secmgr.jar"
updateClasspath="true"
versionClass="com.unisys.od.pdc.secmanager.Version"
versionMethod="getVersion">
</item>
<item
destination="TOMCAT_WEBAPPS"
resourceName="data/com.unisys.ng.secmngr.ws.war"
updateClasspath="false"
versionClass="com.unisys.ng.secmanager.Version"
versionMethod="getVersion">
</item>
<webApplication
warFile="data/com.unisys.ng.secmngr.ws.war">
</webApplication>
<item
destination="TOMCAT_COMMON_LIB"
resourceName="data/unisysng-secmgr-rtcommon.jar"
updateClasspath="true"
versionClass="com.unisys.ng.secmanager.rtcommon.Version"
versionMethod="getVersion">
</item>
</configuration>
</extension>
<extension
point="com.avaya.sce.callflow.ui.dataConnectorUI">
<dataConnectorUI
EditPartClass="com.unisys.od.pdc.ui.callflow.SecurityManagerEditPart"
PaletteItemCategory="Unisys"
PaletteItemDescription="Decrypt a password encrypted with the Security Manager web UI"
PaletteItemIcon="icons/icon_16x16.png"
PaletteItemName="Decrypt Password"
id="com.unisys.od.pe.secmanager">
</dataConnectorUI>
</extension>
<extension
point="com.avaya.sce.callflow.dataConnector">
<dataConnector
CodeGenerator="com.unisys.od.pdc.ui.callflow.SecurityManagerCodeGenerator"
ModelClass="com.unisys.od.pdc.ui.callflow.SecurityManagerFlowItem"
Validator="com.unisys.od.pdc.ui.callflow.SecurityManagerValidator"
connectorId="com.unisys.od.pdc.secmanager"
id="com.unisys.od.pe.secmanager">
</dataConnector>
</extension>
<extension
point="com.avaya.sce.core.searchSupport">
<searchSupport
id="com.unisys.od.pe.secmanager">
<searchElementType
avResourceTypeId="com.unisys.od.pe.secmanager"
label="Decrypt Password">
</searchElementType>
<searchSupportUI
searchResultImageProvider="com.unisys.od.pdc.ui.search.SecurityManagerImageProvider">
</searchSupportUI>
</searchSupport>
</extension>
<extension
point="org.eclipse.help.toc">
<toc
file="help/extension_info.xml"
primary="false">
</toc>
</extension>

</plugin>
<!--END CUT-->

And here is my classpath:
<!--BEGIN CUT-->
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
<accessrules>
<accessrule kind="accessible" pattern="com/avaya/**"/>
</accessrules>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="lib" path="data/unisysng-secmgr-rtcommon.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
<!--END CUT-->

The class in question is the unisys-secmgr-rtcommon.jar file. This file is suppose to be copied to the Tomcat LIB directory however it needs to check the Version before copying. This is an OD 7.1 with JDK 1.8 and Tomcat 8.0.If you'd like, I can send over the UI project, just let me know. :)

Thanks
I have a PDC that is suppose to copy a runtime file to the tomcat lib directory, and every time the PDC goes to check the runtime version, I'm getting a classnotfoundexception. I don't understand why, since the jar file containing the class is part of the build path for the PDC ui project. I can even drill down into the Version classfile, but at runtime (in an Eclipse environment), the system is throwing a class not found exception. I've checked everything I can think of an can't find any indication of why it's not being found at runtime.

Any ideas?
Michael
Thanks again. The content type on the return is set to "Custom Content Type" and the value is "text/plain". When it's set to this value, the rest operation only performs a single request.

I should be able to log the same information then from my rest service, just not to the OD logs. Currently, I'm only logging that the request was processed, since right now there is no logic to handle the input values, and the return is hard-coded as a string value. Again, this is just to get the interface working.

I'll update after I've had time to get into this project (later today).

Thanks again,
Michael
 
Forum Index » Profile for MichaelDailous_deprecated » Messages posted by MichaelDailous_deprecated
Go to: