Access Imported Archive in User Defined Function
Hi!
I want to access a XML file in an user defined function in a message mapping. The XML file is included in an imported archive. I need the information out of this XML file for configuring an extended receiver determination.
Does anyone know how to solve this?
Best regards,
Daniel
Hi Krishna,
a property file will be a solution but is has to be stored in the filesystem. In my scenario I prefer a file (not neccessary xml) which is editeable in the IR.
I tried something in this way (just for testing):
try {
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document document = null;
Element element = null;
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
document = builder.parse(Container.class.getResourceAsStream("routing.xml"));
element = (Element)document.getElementsByTagName("BUSINESS_SYSTEM").item(0);
return element.getNodeValue();
} catch (Exception e) {
return "Crash: "+e.getMessage();
But it crashes, because the resource "routing.xml" cannot be found. I tried to add the namespace or the name of the imported archive or both as prefix, but it don't work. How can I find out under which address/url I can open the xml document?
Best regards,
Daniel
Similar Messages
-
Error Using imported .JAR in user-defined function
Hi All,
I am trying to use jar files provided to me in user defined function as follows:
DataEncryption temp = new DataEncryption();
String ret = new String();
ret = temp.getEncryptedData(a);
return ret;
All jar files working perfectly in java software, But when i am trying to test the mappings by using above user-defined function.
I am catching the error and put in target field then, I am getting following message in target field:
"An error occured in getEncryptedData method : java.lang.SecurityException: The provider SunJCE may not be signed by a trusted party"
Please help in finding the error.
RegardsRohan
Check if the XI Server JRE is the same as the client machine on which you have compiled your JAR.
1.4 has had this issue and i remember seeing it in a few forums.The problem should not occure in 1.5 -
Accessing container element in the User Defined Function
Hi All,
I am accessing a container element in the user defined function.
But it is not working. Actually i want to split a message(1800 records) into a batch of 200.
But it goes in a infinite loop.
Please can you tell me where i am wrong.
Smita
The code is :
public void SplitMsg(String[] a,ResultList result,Container container){
Object container1;
String counter;
int i,j=0;
container1 = container.getParameter("value");
if( container1 == null){
counter = "0";
else {
counter = container.toString();
j = Integer.valueOf(counter).intValue();
for ( i = j ; i <= j + 199 ; i++){
if ( i >= a.length){
container.setParameter("value","9999999");
break;
result.addValue(a<i>);
j += 200;
counter = Integer.toString(j);
container.setParameter("value", counter);Here is another way to accomplish what you wanted.
For the target mapping, use this sequence for mapping
Source element -> removeContext -> Your User-defined Function -> Target Element
When defining User-Defined Function, select "Cache Queue" option.
Since you are using removeContext before calling the UserDefined function, your input to the user defined function will be a String array without ResultList.CC.
Now manipulate the array the way you want it, and build the ResultList result.
After every 200 records, use method
void addContextChange().
This will insert the ResultList.CC at the appropriate places.
Use Display Queue in the Mapping Editor to see the debug values. -
Access to whole payload in user defined function
Hi,
is there a way to access the whole XML payload in a user defined function or is it necessary to employ a Java mapping?
Kind regards,
HeikoHi,
did you have a look at this weblog:
Own Logging of XI Messages
/people/udo.martens/blog/2006/02/16/own-logging-of-xi-messages
by Udo Martens?
it's a complete solution to your issue
Regards,
michal
<a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a> -
Accessing a Cache From an Oracle CQL User-Defined Function
According to the docs ...
I am to use the following element to set the cache property in my bean...
<wlevs:property name="cache" ref="cache-id"/>
However, when I set it, the assembly does not validate.
If I use <property>, I get a NullPointerException on each request when my processor runs.
Using the same CQL code..
Without the <property> tag, the call to the user-defined function works (but I don't have the cache attribute set obviously).
Here is the excerpt from my assembly...
<bean id="cacheFunction" class="ou.cep.function.CacheFunction">
<property name="cache" ref="myCache"/>
</bean>
<!-- The default processor for OCEP 11.0.0.0 is CQL -->
<wlevs:processor id="myProcessor">
<wlevs:listener ref="CacheChannel"/>
<wlevs:function ref="cacheFunction" function-name="isValidID" exec-method="isValidID">
</wlevs:function>
</wlevs:processor>
To repeat, with the same CQL with the user-defined function call, if I remove the property element from the bean definition, I can call the function successfully (it just doesn't do what I need it to do). In this case, I am still using the ref=cacheFunction for the wlevs:function within the processor.
What am I doing wrong?
Edited by: fl0at on Oct 5, 2010 12:22 PM
Edited by: fl0at on Oct 5, 2010 12:28 PMThe case is solved, not sure I could explain why, but...
This implementation of the user-defined function was a migration from an implementation using the same cache in the join. So, when I removed the cache reference in the source stream (where I am now executing a function that accesses the cache), the problem went away and everything is working.
I can explain further if there are questions.
If anyone has thoughts on this, please advise.
As always, thanks for the help. -
Error in simple user defined function
Hi all,
I have seen one simple user defined function on scenario. Now it is working fine. Same code I have used another place. But it is giving some errors
D:/usr/sap/C08/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapc6fa0c70297511dbaf7e00c09f4504e7/source/com/sap/xi/tf/_ST_MM_.java:3: package javax.mail.internet does not exist
import com.sap.aii.mappingtool.tf3.;import com.sap.aii.mappingtool.tf3.rt.;import java.util.;import java.io.; import java.lang.reflect.;import javax.mail.internet.;import javax.mail.;import java.util.;import java.util.Date;import javax.activation.;import java.lang.reflect.;import javax.mail.event.*;
Like that it has shown 13 errors. I have given the package names in imports field what previous function has.Hi,
Please see this from SAP help
<i>a. You can import Java packages to your methods from the Imports input field, by specifying them separated by a comma or semi-colon:
You do not need to import the packages java.lang., java.util., java.io., and java.lang.reflect. since all message mappings require these packages and therefore import them. You should be able to access standard JDK and J2EE packages of the SAP Web Application Server by simply specifying the package under Import. In other words, you do not have to import it as an archive into the Integration Repository. You can also access classes of the SAP XML Toolkit, the SAP Java Connector, and the SAP Logging Service (see also: Runtime Environment (Java-Mappings)).
In addition to the standard packages, you can also specify Java packages that you have imported as archives and that are located in the same, or in an underlying software component version as the message mapping.
b. Create your Java source text in the editor window or copy source text from another editor.</i>
http://help.sap.com/saphelp_nw04/helpdata/en/22/e127f28b572243b4324879c6bf05a0/content.htm
Regards
Vijaya -
User - defined functions for calculating the taxes of state and country
hi expects,
how can write user-defined function in message mapping in which i want to calculate the states taxes (2500) and country taxes (5000) and give the result as grand total in output.please help me?Hi,
Activities
1. To create a new user-defined function, in the data-flow editor, choose Create New Function (This
graphic is explained in the accompanying text), which is located on the lower left-hand side of the
screen. In the menu, choose Simple Function or Advanced Function.
2. In the window that appears, specify the attributes of the new function:
Name
Technical name of the function. The name is displayed in the function chooser and on the data-flow
object.
Description
Description of how the function is used.
Cache
Function type (see above)
Argument Count
In this table, you specify the number of input values the function can process, and name them. All
functions are of type String.
3. In the window that appears, you can create Java source code:
a. You can import Java packages to your methods from the Imports input field, by specifying them
separated by a comma or semi-colon:
You do not need to import the packages java.lang., java.util., java.io., and java.lang.reflect. since
all message mappings require these packages and therefore import them. You should be able to
access standard JDK and J2EE packages of the SAP Web Application Server by simply specifying the
package under Import. In other words, you do not have to import it as an archive into the Integration
Repository. You can also access classes of the SAP XML Toolkit, the SAP Java Connector, and the
SAP Logging Service (see also: Runtime Environment (Java-Mappings)).
In addition to the standard packages, you can also specify Java packages that you have imported as
archives and that are located in the same, or in an underlying software component version as the
message mapping.
b. Create your Java source text in the editor window or copy source text from another editor.
4. Confirm with Save and Close.
5. User-defined functions are limited to the message mapping in which you created the function. To
save the new function, save the message mapping.
6. To test the function, use the test environment.
The new function is now visible in the User-Defined function category. When you select this category,
a corresponding button is displayed in the function chooser pushbutton bar. To edit, delete, or add the
function to the data-flow editor, choose the arrow next to the button and select from the list box
displayed.
Regards
Seshagiri -
Need help with user defined function
Hello SDN,
I need some help with a user-defined function. My source message contains multiple
generic records (1000 char string), and my target message is 1 header record,
then multiple generic records. See description of source and target messages below:
Source:
GenericRecordTable 1..unbounded
Row (1000 char string)
Target:
Field1 (char5)
Field2 (char5)
Field3 (char5)
IT_Data
GenericRecordTable 1..unbounded
Row (1000 char string)
Basically, what I need to do in my user defined funtion is to map the first record
in my source record to the 3 header fields, then map all of the rest of the records
(starting from line 2) into the GenericRecordTable.
Can someone please help me with the code for the user defined function(s) for this
mapping?
Thank you.hi,
Activities
1. To create a new user-defined function, in the data-flow editor, choose Create New Function (This
graphic is explained in the accompanying text), which is located on the lower left-hand side of the
screen. In the menu, choose Simple Function or Advanced Function.
2. In the window that appears, specify the attributes of the new function:
Name
Technical name of the function. The name is displayed in the function chooser and on the data-flow
object.
Description
Description of how the function is used.
Cache
Function type (see above)
Argument Count
In this table, you specify the number of input values the function can process, and name them. All
functions are of type String.
3. In the window that appears, you can create Java source code:
a. You can import Java packages to your methods from the Imports input field, by specifying them
separated by a comma or semi-colon:
You do not need to import the packages java.lang., java.util., java.io., and java.lang.reflect. since
all message mappings require these packages and therefore import them. You should be able to
access standard JDK and J2EE packages of the SAP Web Application Server by simply specifying the
package under Import. In other words, you do not have to import it as an archive into the Integration
Repository. You can also access classes of the SAP XML Toolkit, the SAP Java Connector, and the
SAP Logging Service (see also: Runtime Environment (Java-Mappings)).
In addition to the standard packages, you can also specify Java packages that you have imported as
archives and that are located in the same, or in an underlying software component version as the
message mapping.
b. Create your Java source text in the editor window or copy source text from another editor.
4. Confirm with Save and Close.
5. User-defined functions are limited to the message mapping in which you created the function. To
save the new function, save the message mapping.
6. To test the function, use the test environment.
The new function is now visible in the User-Defined function category. When you select this category,
a corresponding button is displayed in the function chooser pushbutton bar. To edit, delete, or add the
function to the data-flow editor, choose the arrow next to the button and select from the list box
displayed.
http://help.sap.com/saphelp_nw04/helpdata/en/d9/718e40496f6f1de10000000a1550b0/content.htm
http://java.sun.com/j2se/1.5.0/docs/api/
/people/krishna.moorthyp/blog/2006/07/29/documentation-html-editor-in-xi
/people/sap.user72/blog/2006/02/06/xi-mapping-tool-exports
http://help.sap.com/saphelp_nw04/helpdata/en/43/c4cdfc334824478090739c04c4a249/content.htm
UDF -
http://help.sap.com/saphelp_nw04/helpdata/en/22/e127f28b572243b4324879c6bf05a0/content.htm
Regards -
How can I use Seeburger java functions on SAP XI's user defined functions?
Hi All,
As my title implies; how can I use Seeburger java functions on SAP XI's user defined functions? I've tried searching over the net in tutorials regarding this topic but I failed to find one; can someone provide me information regarding my question? thanks very much.
best regards,
MikeHi Mike !
You should check your documentation about which java classes you need to reference in the "import" section of your UDF. And also deploy the java classes into the java stack or include them as a imported archive in integration repository...it should be stated in the seeburger documentation.
What kind of functions are you trying to use?
Regards,
Matias. -
How to resolve the error while using user defined function.
EPN Assembly file
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
xmlns:jdbc="http://www.oracle.com/ns/ocep/jdbc"
xmlns:spatial="http://www.oracle.com/ns/ocep/spatial"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.bea.com/ns/wlevs/spring
http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_1_1_3.xsd
http://www.oracle.com/ns/ocep/jdbc
http://www.oracle.com/ns/ocep/jdbc/ocep-jdbc.xsd
http://www.oracle.com/ns/ocep/spatial
http://www.oracle.com/ns/ocep/spatial/ocep-spatial.xsd">
<wlevs:event-type-repository>
<wlevs:event-type type-name="TestEvent">
<wlevs:class>com.bea.wlevs.event.example.FunctionCEP.TestEvent</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<wlevs:adapter id="InputAdapter"
class="com.bea.wlevs.adapter.example.FunctionCEP.InputAdapter">
<wlevs:listener ref="inputStream" />
</wlevs:adapter>
<wlevs:channel id="inputStream" event-type="TestEvent">
<wlevs:listener ref="processor" />
</wlevs:channel>
<wlevs:processor id="processor">
<wlevs:listener ref="outputStream" />
<wlevs:function function-name="sum_fxn" exec-method="execute">
<bean>com.bea.wlevs.example.FunctionCEP.TestFunction</bean>
</wlevs:function>
</wlevs:processor>
<wlevs:channel id="outputStream" event-type="TestEvent">
<wlevs:listener ref="bean" />
</wlevs:channel>
<bean id="bean" class="com.bea.wlevs.example.FunctionCEP.OutputBean">
</bean>
</beans>
Event class
package com.bea.wlevs.event.example.FunctionCEP;
public class TestEvent {
private int num_1;
private int num_2;
private int sum_num;
public int getSum_num() {
return sum_num;
public void setSum_num(int sumNum) {
sum_num = sumNum;
public int getNum_1() {
return num_1;
public void setNum_1(int num_1) {
this.num_1 = num_1;
public int getNum_2() {
return num_2;
public void setNum_2(int num_2) {
this.num_2 = num_2;
Adapter class
package com.bea.wlevs.adapter.example.FunctionCEP;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.FunctionCEP.TestEvent;
public class InputAdapter implements RunnableBean, StreamSource {
private StreamSender eventSender;
public InputAdapter() {
super();
public void run() {
generateMessage();
private void generateMessage() {
TestEvent event = new TestEvent();
event.setNum_1(10);
event.setNum_2(20);
eventSender.sendInsertEvent(event);
public void setEventSender(StreamSender sender) {
eventSender = sender;
public synchronized void suspend() {
Output Bean class
package com.bea.wlevs.example.FunctionCEP;
import com.bea.wlevs.ede.api.StreamSink;
import com.bea.wlevs.event.example.FunctionCEP.TestEvent;
import com.bea.wlevs.util.Service;
public class OutputBean implements StreamSink {
public void onInsertEvent(Object event) {
System.out.println("In Output Bean");
TestEvent event1 = new TestEvent();
System.out.println("Num_1 is :: " + event1.getNum_1());
System.out.println("Num_2 is :: " +event1.getNum_2());
System.out.println("Sum of the numbers is :: " +event1.getSum_num());
Function Class
package com.bea.wlevs.example.FunctionCEP;
public class TestFunction {
public Object execute(int num_1, int num_2)
return (num_1 + num_2);
config.xml file
<?xml version="1.0" encoding="UTF-8"?>
<wlevs:config xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
xmlns:jdbc="http://www.oracle.com/ns/ocep/config/jdbc">
<processor>
<name>processor</name>
<rules>
<view id="v1" schema="num_1 num_2">
<![CDATA[
select num_1, num_2 from inputStream
]]>
</view>
<view id="v2" schema="num_1 num_2">
<![CDATA[
select sum_fxn(num_1,num_2), num_2 from inputStream // I am getting error when i am trying to call this function
]]>
</view>
<query id="q1">
<![CDATA[
select from v2[now] as num_2* // Showing error while accessing the view also ]]>
</query>
</rules>
</processor>
</wlevs:config>
Error I am getting is :
Invalid statement: "select >>sum_fxn<<(num_1,num_2),age from inputStream"
Description: Invalid call to function or constructor: sum_fxn
Cause: Probable causes are: Function name sum_fxn(int,int) provided is invalid, or arguments are of
the wrong type., or Error while handling member access to complex type. Constructor sum_fxn of type
sum_fxn not found. or Probable causes are: Function name sum_fxn(int,int) provided is invalid, or
arguments are of the wrong type., or Error while handling member access to complex type.
Constructor sum_fxn of type sum_fxn not found.
Action: Verify function or constructor for complex type exists, is not ambiguous, and has the correct
number of parameters.
I have made a user defined function in a java class and configured this function in the EPN assembly file under the processor tag.
But when i am trying to access the function in the config.xml file , it is giving me an error in the query.
Please provide urgent help that how to write the exact query.Hi,
In the EPN Assembly file use
<bean class="com.bea.wlevs.example.FunctionCEP.TestFunction"/>
instead of
<bean>com.bea.wlevs.example.FunctionCEP.TestFunction</bean>
Best Regards,
Sandeep -
User Defined Function is not recognizing java class in IR.
Hi All,
i have written one normal java class, and i imported that java class into IR using imported Archive as a .jar file,
it will add just two values .
now in message mapping i created one user defined function in that
iam trying to call this java class. while testing it is showing error as cannot resolve symbol java class name
so experts please help me in this or it would be appreciate if any one will provide
step by step process of one java class and one USD just to add two numbers.
thanks in advance,
jasmine .Hi,
The steps are as follows:
1) Create a java file with .java extension.
2)Compile it to create a .class file.
3) Create a zip file for this .class file using any compressed archive program(ex-winrar)
4) Upload this zip file as an imported archive ,save and activate.
When you go to this archive,below , you can see your .class file with the older path,for below ex:
ObjRecord.class jxl/biff/drawing/
you have to give following entry in imports section:
jxl.biff.drawing.ObjRecord;
Please try this and let us know if this works.
Thanks.
Regards,
Shweta -
Error in User defined function
I have created a user defined function to make a call to SAP using JCo.
But I am getting an error "package com.sap.mw.jco does not exist"
Do we need to install JCo on our server?
Thanks in advanceHallo Vijaya Kumari,
if you use XI3.0 then you should check csn note 753294:
Symptom
A message mapping contains a user-defined function that uses a class
from the "com.sap.mw.jco", "sapxmltoolkit" or "com.sap.tc.Logging"
library. An error stating that the source code contains syntax errors
occurs when you test or activate the message mapping. When you use a
class from "com.sap.mw.jco", the system reports, for example, "package
com.sap.mw.jco does not exist".
This error only occurs in systems containing a Support Package lower
than 5.
Solution
Import Support Package 5 or higher.
You can use the following workaround as a short-term solution: Upload
the library that is referenced in the message mapping into the software
component of the message mapping as an "imported archive". Do not
activate the "imported archive" with the library since it is not needed
for the runtime. The only purpose of the archive is to allow the message
mapping to be compiled. To avoid version conflicts with newer libraries,
you should delete the archive again after you import Support Package 5
or higher.
In your case you will find the relevant jar file in the path
[sap_j2ee_engine_installaltion_path]\cluster\server0\bin\ext\com.sap.mw.jco\jrfc.jar
Regards Franz -
Java class within user defined function
Hi all,
in order to have a JDBC-lookup java function "globally" in XI i created a java class and imported it to XI as an imported Archive (i have to do the lookup within a mapping). I then can include the class to a user defined function. However the problem is now that this works fine within one Software Component Version but when i want to use it in several SWCV i have to import the jar to every SWCV. My question is therefore if anybody has already had this problem and if there is another possible solution - maybe deploying the class to XI using SDM?
Thank you for your thoughts.
Mathiashi Markus,
>>>>My question is therefore if anybody has already had this problem and if there is another possible solution - maybe deploying the class to XI using SDM?
if you do that then you'll have to remember about it
every time you import a new SP or upgreade your XI
this is not standard so SAP may always overwrite it
and your interfaces will stop working
consider importing it for every SWCV
Regards,
michal -
How to use StreamTransformationException in user-defined function?
Hi,
I'm doing a DBLookup (using Java pgm in one of my Imported Java archives) for populating one of the fields in message mapping. If the DB connection fails, I want to terminate the mapping by throwing a StreamTransformationException from within a user-defined function.
I require urgent help in this regard.
Thanks in advance.
Regards,
Sridhar Rajan NHi,
I had the same problem. I failed to find the way how to throw a StreamTransformationException in my user-defined function. But I used another exception: NullPointerException. Yes, I know, this is not an elegant solution...
Best regards,
Andrzej Filusz -
How to migrate User Define Function to another mapping in other namespace
Hi Everybody
I have define many User Define Functions in mapping
How can i use them in other mapping
Thank you in advanceHi,
I tried to explain the steps.
1. Take the JAVA code of your User-Defined Functions
2. Go to a JAVA editor (e.g NWDS, Eclipse, etc...)
2.1. create a Java project
2.2. create a Java class
2.3. inside your Java class, put each JAVA code of your User-Defined Function inside a Method
2.4. Export your Java class to a JAR file (e.g my_tools.jar)
3. Go to IR
3.1 create an Imported Archive (IA) and upload your JAR file.
3.2 in this IA, you see your Java class which contains all your methods.
4. inside your mapping,
4.1 create a User-Defined Function <u>and import</u> your class
4.2 use your method.
So, you define in only one place your code (thanks to a IA) and you will be able to use it inside several mappings.
I hope I don't forget steps...
Advantage: if tomorrow, you want to create a new function, just add a new method to your Java class and re-import your JAR file
Oh, I missed: your IA must be created inside a specific Software Component (SC__TOOLS) and this one must be linked with the others by a "Usage dependency", else your IA will be recognise only in one Software Component (and maybe only in one namespace)
Mickael
Maybe you are looking for
-
I am working with HDV 23.98 progressive footage in Final Cut Pro. Its final output will be an SD DVD. I exported my sequence to compressor for a Mpeg-2 Widescreen SD (60 minutes) output. Next, I am imported to DVD Studio Pro for the build. I simulate
-
OS windows 7 64 bit PS CS6 Printer Canon Pro 100 Eizo monitor all profiled When printing A5 & A4 sizes resulting print is perfect When moving to A3 or A3+ there is a slight colour shift and prints are unacceptably dark I'm setting PS to
-
Dear expert, in iw31/iw32 I want to validate plant section field under location tab with recipient field in component tab.that means when user create order with material he will enter recipient as a plant section . & if this two field are not equal r
-
can any one tell me how to store a pdf file in the blob. I m using forms 10g rel2 and oracle xe 10g.
-
Unable to connect Airport extreme to windows 7.
I use a pc with windows 7, but have had problem with the previous D-link router I used, so therefore bought an Airport extreme ysterday to connect the iPads and iPhones we have. After installing the Airport Utility from the CD, the Airport extreme sh