Java Mapping Query
Hi Experts,
I have a query regarding creating Output XML in SAP PI 7.1. I am using the below command
out.getOutputPayload().getOutputStream().write(outDoc.toString().getBytes("UTF-8"));
Where out is the TransformationOutput parameter and outDoc is an output XML not the String.So, I have used toString() here.
But, when we have imported it in PI7.1 the output is not creating but the entire program is running successfully.
Th error to create output XML in PI7.1 is as below.
Unable to display tree view; Error when parsing an XML document (Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XMLParser: No data allowed here: (hex) 5b, 23, 64 (:main:, row:1, col:3))
Kindly let me know.
Regards,
Aniruddha
Hi Ninad,
Thanks for your interest in the post, it is a file to mdm scenario, where the entire mapping is wriiten in Java map.
We have tested the Java program in NWDS with main() and it has worked successfully.But, when I changed the main with transform and tested it in PI7.1 with the required changes I am getting that error
Unable to display tree view; Error when parsing an XML document (Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XMLParser: No data allowed here: (hex) 5b, 23, 64 (:main:, row:1, col:3))
But, I have addeed trace in different level and all are coming means the program is running, only in case of
getTrace().addInfo("Before passing XML to String");
out.getOutputPayload().getOutputStream().write(outDoc.toString().getBytes("UTF-8"));
getTrace().addInfo("After passing XML to String");
Both the getTrace() is showing in PI7.1.
Trace Output:
Records Created - 1
Before passing XML to String
After passing XML to String
END APPLICATION TRACE ***
Java mapping hcl/com/XmlValidation completed. (executeStep() of hcl.com.XmlValidation).
Execution of mapping on server took 564 milliseconds Executed successfully
only the changed syntax is I am using toString() on outDoc as outDoc is an Document type not the String Type.Actaully, I have manipulate the input as an XML not as a String or Stream.
Regards,
Aniruddha
Similar Messages
-
Query on processing a PDF file using Java mapping
Hi All,
i am trying to process a XML and PDF file using Java mapping, it is successful in XML but unable to do for PDF.
below is the code i am using... can any one guide me how to process PDF's..
byte byte1 = 0;
java.io.ByteArrayOutputStream bos = (ByteArrayOutputStream)outputstream;
while((byte1=(byte)inputstream.read())!=-1){
bos.write(byte1);
bos.close();
Thank You,
MadhavHi Madhav,
I think instead of going with JAVA mapping you can write a custom adapter module for it.
Ref: /people/sap.user72/blog/2005/07/31/xi-read-data-from-pdf-file-in-sender-adapter
Also check : Re: PI 7.1 : Taking a input PDF file and mapping it to a hexBinary attribute
/people/shabarish.vijayakumar/blog/2009/05/17/trouble-writing-out-a-pdf-in-xipi
Thanks,
Edited by: Hareenkumar on Dec 21, 2010 11:12 AM -
Hi experts
I want to create a java map. My requirement is given below.
I/P xml>>
<?xml version="1.0" encoding="UTF-8"?>
<TradeplaceMessage productionMode="production" xmlns="http://zhm.....">
<TransportEnvelope>
<Routing><To>abcd</To><From>
I want to rename attribute value xmlns to a new name XSX
Thanks in advance
Dhanish JosephDhanish,
Please check htis thread:
How to add xmlns attributes in main node
This should solve your query.
Refer contribution from "Fariha Ali ", where you have to implement java mapping and apply the code suggested in the thread.
Let us know if issue still persists.
Divyesh -
Regarding Java mapping and ABAP Mapping
Hello,
If I suppose to do Java mapping or ABAP mapping, Is there any pre requisite to perform these two mappings?
If exist what they are?
How to perform them?
Thank youHello jyotsna,
Java mapping can be used when you have complex mapping structures.
We can do most of the times for our requirements through Graphical mapping.
When the structures are very complex to build you can go for SAX (Simple API for XML) or DOM (Document Object Model) parsers.
Message mapping internally generates DOM parser.
Java Mapping in XI
https://www.sdn.sap.com/irj/sdn/advancedsearch?cat=sdn_all&query=java+mapping&adv=false&sortby=cm_rnd_rankvalue#
SAP Network Blog: Implementing a Java Mapping in SAP PI
/people/carlosivan.prietorubio/blog/2007/12/21/implementing-a-java-mapping-in-sap-pi
Java Mapping (SAP Library - Partner Connectivity Kit)
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/frameset.htm
SAP Network Blog: XI Java Mapping Helper (DOM)
/people/alessandro.guarneri/blog/2007/03/25/xi-java-mapping-helper-dom
SAP Network Blog: Testing and Debugging Java Mapping
/people/stefan.grube/blog/2006/10/23/testing-and-debugging-java-mapping-in-developer-studio
Binary Conversion in XI - Java Mapping - Code Gallery - Wiki
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/binary%2bconversion%2bin%2bxi%2b-%2bjava%2bmapping
SAP Network Blog: "JAVA MAPPING", an alternate way of reading a CSV file
/people/rahul.nawale2/blog/2006/07/18/java-mapping-an-alternate-way-of-reading-a-csv-file
ABAP mappings run on ABAP Stack and are developed in the ABAP workbench of the Integration Server.
You normally do not need to use the ABAP mappings and is preferable for someone with ABAP programming background. I should say JAVA functions would suffice any complex scenarios.
refer step by step guides for ABAP Mapping
ABAP Mapping
https://www.sdn.sap.com/irj/sdn/advancedsearch?cat=sdn_all&query=abap+mapping&adv=false&sortby=cm_rnd_rankvalue#
How to Use ABAP Mapping in Exchange Infrastructure 3.0 (NW2004)
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/5c46ab90-0201-0010-42bd-9d0302591383
SAP Network Blog: Testing ABAP Mapping
/people/sameer.shadab/blog/2005/09/29/testing-abap-mapping
SAP Network Blog: How to call XI ABAP Mapping via RFC
/people/ricardoandres.maienza/blog/2007/04/06/how-to-call-xi-abap-mapping-via-rfc
SAP Network Blog: XI: ABAP mapping logs - more standard = better visibility
/people/michal.krawczyk2/blog/2006/09/20/xi-abap-mapping-logs--more-standard-better-visibility
SAP Network Blog: Dynamically sending a mail to the PO creator using XSLT- ABAP Mapping
/people/rahul.nawale2/blog/2006/11/01/dynamically-sending-a-mail-to-the-po-creator-using-xslt-abap-mapping
You need to provide the name of your mapping program maually , you see it is an input box.
just provide the name of abap mapping program it will work.
and one more thing you cannot test abap mapping program in integration builer you need to test in abap only.
use tcode: SXI_MAPPING_TEST for testing abap mapping
Thanks,
Satya
Reward points if it is useful.. -
How to choose between XSLT & JAVA Mapping.
HI
Usually Java mapping is preferred when the target structure is relatively complex and the transformation cannot be accomplished by simple graphical mapping.
When to use Java mapping
1) Java mapping are used when graphical mapping cannot help you.
Advantages of Java Mapping.
1)you can use Java APIs and Classes in it.
2) file look up or a DB lookup is possible
3) DOM is easier to use with lots of classes to help you create nodes and elements.
Java mapping can be used when you have complex mapping structures.
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/frameset.htm
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/10dd67dd-a42b-2a10-2785-91c40ee56c0b
Java Mapping (Part I)
https://Difference in using java,xslt,message mapping
Java Mapping (Part I)
Java Mapping (Part II)
Check these for JAVA Mapping
Java Mapping (Part I)
Java Mapping (Part II)
Java Mapping (Part III)
Testing and debugging
Testing and Debugging Java Mapping in Developer Studio
Implermenting JAVA Mapping in PI
Implementing a Java Mapping in SAP PI
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/10dd67dd-a42b-2a10-2785-91c40ee56c0b
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/400ee77e-f9d6-2a10-2b8c-99281a4dcf6b
XSLT mappings can be imported into the Integration Repository; java methods can be called from within the XSLT style sheet. Advantages of this mapping are: open standard, portable, extensible via Java user-defined functions
XSLT Mapping
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/01a57f0b-0501-0010-3ca9-d2ea3bb983c1
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/9692eb84-0601-0010-5ca0-923b4fb8674a
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/006aa890-0201-0010-1eb1-afc5cbae3f15
xpath functions in xslt mapping
https://www.sdn.sap.com/irj/sdn/advancedsearch?cat=sdn_all&query=xslt+mapping&adv=false&sortby=cm_rnd_rankvalue#
XSLT MAPPING:
Generic XSLT Mapping for SAP XI,Part I
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/01a57f0b-0501-0010-3ca9-d2ea3bb983c1
Generic XSLT Mapping for SAP XI,Part II
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/9692eb84-0601-0010-5ca0-923b4fb8674a
XSLT: Recursive Templates
XSLT: Recursive Templates
Easy RFC lookup from XSLT mappings using a Java helper class
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/05a3d62e-0a01-0010-14bc-adc8efd4ee14
Step u2013 By u2013 Step Simple Approach for XSLT Mapping
Step By Step Simple Approach for XSLT Mapping
Advantages of using XSLT mapping
XSLT program itself defines its own target structure.
XSLT programs can be imported into SAP XI. Message mapping step can be avoided. One can directly go for interface mapping once message interfaces are created and mapping is imported.
XSLT can be used in combination with graphical mapping.
Multi-mapping is also possible using xslt.
XSLT can be used with ABAP and JAVA Extensions.
Disadvantages of using XSLT mapping
Resultant XML payload can not be viewed in SXMB_MONI if not in XML format (for service packs < SP14).
Interface mapping testing does not show proper error description. So errors in XSLT programs are difficult to trace in XI but can be easily identified outside XI using browser.
XSLT mapping requires more memory than mapping classes generated in Java.
It all depends upon the required Scenario and the requirement , which mapping has to be used.
cheers -
About Java mapping and java proxy
Hi
Iam new to Xi and basically iam an ABAPER.When iam dooing mappinps or proxies i cant able to understand the java pari cant (javamapping and java proxies) .I need some notes on java mapping and java proxy which is easy to do.And why do we use this java mapping or java proxy particularly when we r having abap mappipng and abap proxy.
thanks in advanceHi,
refer
Java Mapping
SAP Network Blog: Java Mapping (Part I)
/people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-i
Java Mapping in XI
https://www.sdn.sap.com/irj/sdn/advancedsearch?cat=sdn_all&query=java+mapping&adv=false&sortby=cm_rnd_rankvalue#
Runtime Environment (Java Mappings) (SAP Library - Partner Connectivity Kit)
http://help.sap.com/saphelp_nw04/helpdata/en/bd/c91241c738f423e10000000a155106/frameset.htm
Java Mapping (SAP Library - Partner Connectivity Kit)
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/frameset.htm
SAP Network Blog: Testing and Debugging Java Mapping
/people/stefan.grube/blog/2006/10/23/testing-and-debugging-java-mapping-in-developer-studio
SAP Network Blog: Implementing a Java Mapping in SAP PI
/people/carlosivan.prietorubio/blog/2007/12/21/implementing-a-java-mapping-in-sap-pi
"JAVA MAPPING", an alternate way of reading a CSV file
/people/rahul.nawale2/blog/2006/07/18/java-mapping-an-alternate-way-of-reading-a-csv-file
SAP Network Blog: XI Java Mapping Helper (DOM)
/people/alessandro.guarneri/blog/2007/03/25/xi-java-mapping-helper-dom
Java Proxy
Java Proxy Objects (SAP Library - SAP Exchange Infrastructure)
http://help.sap.com/saphelp_nw04/helpdata/en/c5/7d5e3c754e476ee10000000a11405a/frameset.htm
Accessing Active Directory through Java Proxy on SAP Exchange Infrastructure 3.0
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/10716e9f-23d7-2a10-8c8c-d2665615f8fc
Thanks
Swarup -
Hello,
Can any one explain Java mapping when I am sending PO to reciever system? And what are the necessary requirements? And what are the transction codes we will use for this?
Plz...........
Thank youHi,
Java mapping can be used when you have complex mapping structures.
We can do most of the times for our requirements through Graphical mapping.
When the structures are very complex to build you can go for SAX (Simple API for XML) or DOM (Document Object Model) parsers.
Message mapping internally generates DOM parser.
Java Mapping in XI
https://www.sdn.sap.com/irj/sdn/advancedsearch?cat=sdn_all&query=java+mapping&adv=false&sortby=cm_rnd_rankvalue#
SAP Network Blog: Implementing a Java Mapping in SAP PI
/people/carlosivan.prietorubio/blog/2007/12/21/implementing-a-java-mapping-in-sap-pi
Java Mapping (SAP Library - Partner Connectivity Kit)
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/frameset.htm
SAP Network Blog: XI Java Mapping Helper (DOM)
/people/alessandro.guarneri/blog/2007/03/25/xi-java-mapping-helper-dom
SAP Network Blog: Testing and Debugging Java Mapping
/people/stefan.grube/blog/2006/10/23/testing-and-debugging-java-mapping-in-developer-studio
Binary Conversion in XI - Java Mapping - Code Gallery - Wiki
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/binary%2bconversion%2bin%2bxi%2b-%2bjava%2bmapping
SAP Network Blog: "JAVA MAPPING", an alternate way of reading a CSV file
/people/rahul.nawale2/blog/2006/07/18/java-mapping-an-alternate-way-of-reading-a-csv-file
Difference in using java,xslt,message mapping
/people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-i
/people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-ii
/people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-iii
/people/ravikumar.allampallam/blog/2005/06/24/convert-any-flat-file-to-any-idoc-java-mapping
/people/amol.joshi2/blog/2006/03/10/think-objects-when-creating-java-mappings
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/content.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/43/09b16006526e72e10000000a422035/frameset.htm
/people/venkataramanan.parameswaran/blog/2006/12/12/java-mapping-to-handle-flat-files-in-sap-xi
Thanks
Swarup -
How to Cache Data from database for java mapping ?
Hi
I have a scenario where i have to dynamically query a huge table in some other database from java mapping code.
Therefore instead of making a new Database trip everytime is there a mechanism by which i can cache the entire table contents into XI first and then use this cache for looking up data through my java mapping.
Any other alternative also welcome which would give best performance.
Please Suggest
regards
Nilesh Taunk.Hi Nilesh,
I am not sure if you can actually cache the table in XI. You will have to look up directly from your Database everytime your mapping excecutes.
To perform DB lookup during mapping very efficiently, I would suggest that you take a look at this blog,
/people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
Also, instead of doing the DB look up in mapping, you can also use your JDBC adapter as a sender and collect the information you want from your DB,
If you are using your JDBC as a sender, then your JDBC will poll over your database and select the rows that satisfy your Select Query. Also, there is another field in your JDBC adapter that is very important and that is the Update satatement. Once your JDBC adapter executes your select query and selects rows from the database, you might not need those rows to be selected again. In this csse, you can use the Update statement to update the database.
http://help.sap.com/saphelp_nw04/helpdata/en/7e/5df96381ec72468a00815dd80f8b63/content.htm
http://help.sap.com/saphelp_nw04/helpdata/en/2e/96fd3f2d14e869e10000000a155106/content.htm
The choice between a JDBC sender adapter , and the DB lookup will have to be on the basis of your requirements.
Regards,
Bhavesh -
Hi,
Question:
1. What is java mapping.
2. How I use java mapping/UDF in message mapping
for my below scenario
In my Request XML there are 2 fields.
In my Response XML there are 2 fields.
Field 1 of Request XML needs to be mapped directly to
Field 1 of Response XML.
Field 2 needs to be passed as paramter to java class and
java class will be give response that will be mapped to
Field 2 of Response XML.
Pls advice . It is urgent.
RegardsHi Rac,
Java mapping can be used when you have complex mapping structures.
We can do most of the times for our requirements through Graphical mapping.
When the structures are very complex to build you can go for SAX (Simple API for XML) or DOM (Document Object Model) parsers.
Message mapping internally generates DOM parser.
Java Mapping in XI
https://www.sdn.sap.com/irj/sdn/advancedsearch?cat=sdn_all&query=java+mapping&adv=false&sortby=cm_rnd_rankvalue#
SAP Network Blog: Implementing a Java Mapping in SAP PI
/people/carlosivan.prietorubio/blog/2007/12/21/implementing-a-java-mapping-in-sap-pi
Java Mapping (SAP Library - Partner Connectivity Kit)
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/frameset.htm
SAP Network Blog: XI Java Mapping Helper (DOM)
/people/alessandro.guarneri/blog/2007/03/25/xi-java-mapping-helper-dom
SAP Network Blog: Testing and Debugging Java Mapping
/people/stefan.grube/blog/2006/10/23/testing-and-debugging-java-mapping-in-developer-studio
Binary Conversion in XI - Java Mapping - Code Gallery - Wiki
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/binary%2bconversion%2bin%2bxi%2b-%2bjava%2bmapping
SAP Network Blog: "JAVA MAPPING", an alternate way of reading a CSV file
/people/rahul.nawale2/blog/2006/07/18/java-mapping-an-alternate-way-of-reading-a-csv-file
Thanks,
Satya Kumar.
Reward points if it is useful.. -
Error while doing java mapping
Hi,
I have written a java mapping code .But i have a small doubt when i compile it it is showing errors that package com.sap.aii.mapping.api does not exist.How can i solve the problem.Please help me in this issue.
Thanks,
BhargavHi ,
check this thread, it may help you.
https://forums.sdn.sap.com/click.jspa?searchID=3558715&messageID=3229273
Regards,
Ramesh. -
Get dynamic filename in a Java Mapping (NOT UDF)
Hi,
we are using a Java Mapping step in XI (not UDF). We need to have access to the filename. In the File Adapter we set the message attributes and can see the filename value in the SXMB_MONI.
We use the following code fragment to have access to the filename:
Container container = new Context(new FunctionWrapper(0));
DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
String sourceFileName = conf.get(key);
This doesn't work. We think the declaration of the container class is wrong. Does anybody have some information about using the dynamic attributes in Java Mappings?
Thanks in advance
Michaelimport com.sap.aii.mapping.api.*;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
public class JavaProgram
implements StreamTransformation
public JavaProgram()
public void setParameter(Map map)
param = map;
if(param == null)
param = new HashMap();
public void execute(InputStream inputstream, OutputStream outputstream)
try
DynamicConfiguration dynamicconfiguration = (DynamicConfiguration)param.get("DynamicConfiguration");
DynamicConfigurationKey dynamicconfigurationkey = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File", "FileName");
String s = dynamicconfiguration.get(dynamicconfigurationkey);
//Your logic
catch(Throwable throwable)
throwable.printStackTrace();
private Map param; -
PI 7.11 - How to create a System Error in SXMB_MONI using a Java Mapping
Hi
We ve go a Java Mapping in a File-to-HTTP Scenario. It works perfect except of one error case: if an empty source file or a source file with the wrong structure is delivered. In this case our Java Mapping forwards an empty payload to the HTTP channel. So, for PI is the mapping successful.
I'd like to recognize this case and invoke a system error in the SXMB_MONI, so that this mapping will be stopped and our alerting concept informs the users. I know, how to recognize the case in Java but need to know how to create the System Error Status in the PI System.
Thanks in advance
MichaelHi Michael,
Please refer here for the mapping API description:
http://help.sap.com/javadocs/NW04S/SPS09/pi/com/sap/aii/mapping/api/package-summary.html
You can use the StreamTransformationException exception describet there to raise an error from your Java mapping. Direct link:
http://help.sap.com/javadocs/NW04S/SPS09/pi/com/sap/aii/mapping/api/StreamTransformationException.html
You might also consider using the "Empty-File Handling" option in sender file CC to avoid processing empty files by PI.
Hope this helps,
Greg -
PI Java Mapping NullPointerException
Hi Gurus,
I'm having some troubles doing the mapping through java mapping in PI.
I've done the java class in the SAP NWDS and imported it on PI through the ESR.
Now i'm trying to test through the SOAP and i've found the following error in the "Communication Channel Monitor":
500 Internal Server Error SAP NetWeaver Application Server/Java AS
java.lang.NullPointerException: while trying to invoke the method com.sap.aii.af.sdk.xi.lang.Binary.getBytes() of a null object returned from com.sap.aii.af.sdk.xi.mo.xmb.XMBPayload.getContent()
And the following error in the SXMB_MONI:
<SAP:Category>XIServer</SAP:Category>
<SAP:Code area="INTERNAL">CLIENT_SEND_FAILED</SAP:Code>
<SAP:P1>500</SAP:P1>
<SAP:P2>Internal Server Error</SAP:P2>
<SAP:P3>(See attachment HTMLError for details)</SAP:P3>
<SAP:P4 />
<SAP:AdditionalText />
<SAP:Stack>Error while sending by HTTP (error code: 500 , error text: Internal Server Error) (See attachment HTMLError for details)</SAP:Stack>
I've developed the code below:
public class PI_Mapping_IF extends AbstractTransformation {
public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
this.execute(in.getInputPayload().getInputStream(), out.getOutputPayload().getOutputStream());
public void execute(InputStream in, OutputStream out) throws StreamTransformationException {
try
// Inicio do java mapping
getTrace().addInfo("JAVA Mapping Iniciado"); //Log para o PI/XI
// Declarações referentes ao XML de entrada
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document xml_in = db.parse(in);
// Declarações referentes ao XML de saída
Document xml_out = db.newDocument();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// Remove o standalone
xml_in.setXmlStandalone(true);
// Declara a estrutura que a RFC irá receber
Element root = xml_out.createElement("ns1:ZFSD_VMOI_UPLOAD_CF_PG");
root.setAttribute("xmlns:ns1","urn:sap-com:document:sap:rfc:functions");
xml_out.appendChild(root);
Element i_cenario = xml_out.createElement("I_CENARIO");
root.appendChild(i_cenario);
Element t_input = xml_out.createElement("T_INPUT");
root.appendChild(t_input);
Element item = xml_out.createElement("ITEM");
t_input.appendChild(item);
Element STRING = xml_out.createElement("STRING");
item.appendChild(STRING);
Element t_return = xml_out.createElement("T_RETURN");
root.appendChild(t_return);
Element item_r = xml_out.createElement("ITEM");
t_return.appendChild(item_r);
Element message = xml_out.createElement("MESSAGE");
item_r.appendChild(message);
// Verifica se existe algum filho no nó
NodeList nodos = xml_in.getChildNodes();
if (nodos.item(0) != null)
getTrace().addInfo("O nó(XML) possui filhos"); //Log para o PI/XI
// Declaração de variáveis
String ident = ""; // <Ident>
String buyer = ""; // <BuyerLineItemNum>
String result = ""; // <Ident>;<BuyerLineItemNum>;<Date>;<QuantityValue>
// Inicia a extração das informações do XML
try{
// Recupera o nó ShipToParty
NodeList nodeShip = xml_in.getElementsByTagName("ns0:ShipToParty");
Node node = nodeShip.item(0);
Element elemXML = (Element) node;
try{
NodeList nodeIdent = elemXML.getElementsByTagName("ns0:Ident");
Element nameElement = (Element) nodeIdent.item(0);
nodeIdent = nameElement.getChildNodes();
// Recupera o valor da chave <Ident>
ident = PI_Mapping_IF.VerifyNull(((Node) nodeIdent.item(0)).getNodeValue());
}catch(Exception e){
result += "0.0;";
// Recupera o nó ListOfMaterialGroupedPlanningDetail
NodeList nodeBuyer = xml_in.getElementsByTagName("ns0:MaterialGroupedPlanningDetail");
for (int i = 0; i < nodeBuyer.getLength(); i++) {
node = nodeBuyer.item(i);
elemXML = (Element) node;
try{
// Preenche a chave BuyerLineItemNum
NodeList nodeBuyerLine = elemXML.getElementsByTagName("ns0:BuyerLineItemNum");
Element elemBuyerLine = (Element) nodeBuyerLine.item(0);
nodeBuyerLine = elemBuyerLine.getChildNodes();
buyer = PI_Mapping_IF.VerifyNull(((Node) nodeBuyerLine.item(0)).getNodeValue());
}catch(Exception e){
buyer += "0;";
result = ident+";"+buyer+";";
Node nodeDt_Qnt = nodeBuyer.item(i);
Element elemDt_Qnt = (Element)nodeDt_Qnt;
NodeList nodeValores = elemDt_Qnt.getElementsByTagName("ns0:ScheduleDetail");
for (int j = 0; j < nodeValores.getLength(); j++) {
node = nodeValores.item(j);
elemXML = (Element) node;
try{
// Preenche a chave Date
NodeList modelExtra = elemXML.getElementsByTagName("ns0:Date");
Element extraElement = (Element) modelExtra.item(0);
modelExtra = extraElement.getChildNodes();
result += PI_Mapping_IF.VerifyNull(((Node) modelExtra.item(0)).getNodeValue())+";";
}catch(Exception e){
result += "//;";
try {
// Preenche a chave QuantityValue
NodeList modelURL = elemXML.getElementsByTagName("ns0:QuantityValue");
Element urlElement = (Element) modelURL.item(0);
modelURL = urlElement.getChildNodes();
result += PI_Mapping_IF.VerifyNull(((Node) modelURL.item(0)).getNodeValue())+";";
} catch (Exception e) {
result += "0.0;";
// Marca o final do registro
result += "||";
// Preenche os nós itens
Text srcxml = xml_out.createTextNode(result);
STRING.appendChild(srcxml);
result = "";
buyer = "";
}catch(Exception e){
// Remove o standalone
xml_out.setXmlStandalone(true);
// Preenche o Cenario
Text cenario = xml_out.createTextNode("P&G");
i_cenario.appendChild(cenario);
// Preenche mensagem de retorno
Text msgxml = xml_out.createTextNode("XML lido com sucesso!");
message.appendChild(msgxml);
// Escreve a saida do XML
transformer.transform(new DOMSource(xml_out), new StreamResult(out));
getTrace().addInfo("Fim da execução do Java Mapping");
} catch (ParserConfigurationException e) {
getTrace().addWarning(e.getMessage());
throw new StreamTransformationException("Can not create DocumentBuilder.", e);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
Am i doing anything wrong in the code? Where can this nullpointerexception be triggered?
Thanks.These three xml are the same:
<?xml version="1.0"?><a:xml xmlns:a="urn:123">root</a:xml>
<?xml version="1.0"?><xml xmlns="urn:123">root</xml>
<?xml version="1.0"?><ns0:xml xmlns:ns0="urn:123">root</ns0:xml>
But your code will work only with last one, because it doesn't bound namespace to prefix ns0. -
Java Mapping in pi 7.1 using pi 7.1 nwds
I am writing a program to remove the special chars in NWDS Java mapping. this is for replacing the "&" with "&".. I am able to compile it and import the jar in PI.. but it does not do anything.. please check..
And also let me know where to check for Java mapping executed with trace detail.. to check if any error
try {
int read_data;
while ((read_data = arg0.getInputPayload().getInputStream().read()) != -1) {
if (read_data != '&') {
arg1.getOutputPayload().getOutputStream().write(read_data);
} else {
arg1.getOutputPayload().getOutputStream().write("&".getBytes());
arg1.getOutputPayload().getOutputStream().flush();
}catch (Exception e) { }Dear Gopal,
If i not wrong you need to replace all the charecters "&" with blank ...
if so you can this code for doing that..
String outData = inData.replaceAll("&","");
or
you need to replace any special charecter to blank please clarify..
so that i can help you out to solve this issue using java mapping..
Regards
Vijay -
Hi All,
I am getting the below error while executing a JAVA mapping.
<SAP:Category>Application</SAP:Category>
<SAP:Code area="MAPPING">LINKAGE_ERROR</SAP:Code>
<SAP:P1>XMLNSTagCreate1/XMLNSTagCreate1</SAP:P1>
<SAP:P2>java.lang.NoClassDefFoundError: XMLNSTagCreate1/XM</SAP:P2>
<SAP:P3>LNSTagCreate1 (wrong name: XMLNSTagCreate1)</SAP:P3>
<SAP:P4 />
<SAP:AdditionalText />
<SAP:Stack>Linkage error while loading class XMLNSTagCreate1/XMLNSTagCreate1; java.lang.NoClassDefFoundError: XMLNSTagCreate1/XMLNSTagCreate1 (wrong name: XMLNSTagCreate1)</SAP:Stack>
<SAP:Retry>M</SAP:Retry>
I have tried compiling the code in the same JRE as the one in PI. Still it is not working.
Please suggest.
Regards,
Yashwanth
Edited by: YashwanthSVK on Aug 17, 2011 8:38 PMHi all... thank you for the replies.. I have compiled the code in the same version of JRE as the PI version...
Hi Vijay,
I also felt the same but as I do not have much knowledge in JAVA, i could not track it further.
below is the code for the mapping... would you mind if I ask you to have a look at it and let me know where the error is..
thank you so much ...
import java.io.*;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerFactory;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.sap.aii.mapping.api.MappingTrace;
import com.sap.aii.mapping.api.StreamTransformation;
import com.sap.aii.mapping.api.StreamTransformationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.FileWriter;
This mapping creates xmlns attribute to send to Tradeplace
public class XMLNSTagCreate1 extends DefaultHandler implements StreamTransformation {
private Map param;
private MappingTrace trace;
private OutputStream out;
public void execute(InputStream in, OutputStream out)
throws StreamTransformationException {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
try {
//trace.addWarning("Execute function starts here");
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
try {
org.w3c.dom.Document doc = docBuilder.parse(in);
//Node TradeplaceMessage = doc.getFirstChild();
Element trade=(Element) doc.getFirstChild();
if(trade.hasAttribute("tag1"))
NamedNodeMap TradeplaceMessageAttributes = trade.getAttributes();
String xmlnsValue=trade.getAttribute("tag1");
String modeValue=trade.getAttribute("productionMode");
trace.addInfo("XMLNS Value:"+xmlnsValue);
trade.removeAttribute("tag1");
trade.removeAttribute("productionMode");
trade.setAttribute("xmlns",xmlnsValue);
trade.setAttribute("productionMode",modeValue);
javax.xml.transform.Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = result.getWriter().toString();
//System.out.println(xmlString);
out.write(xmlString.getBytes());
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void main2(String[] args) throws Exception {
String xmlFile = "U:
Untitled.xml";
InputStream in = new BufferedInputStream(new FileInputStream(xmlFile));
XMLNSTagCreate1 test = new XMLNSTagCreate1();
//test.countOccurences(in);
public static void main(String[] args) throws Exception {
String xmlFile = "//NA.AD.WHIRLPOOL.COM//myApps//home//NA//qqjos1d//My Documents//TP2.xml";
InputStream in = new BufferedInputStream(new FileInputStream(xmlFile));
FileOutputStream out = new FileOutputStream("//NA.AD.WHIRLPOOL.COM//myApps//home//NA//qqjos1d//My Documents//DhanishTP2.xml");
XMLNSTagCreate1 test = new XMLNSTagCreate1();
test.execute(in, out);
OutputStreamWriter out1 = new OutputStreamWriter(out,"UTF-8");
/* (non-Javadoc)
@see com.sap.aii.mapping.api.StreamTransformation#setParameter(java.util.Map)
public void setParameter(Map param) {
// TODO Auto-generated method stub
Maybe you are looking for
-
Help needed in sqlservers connection
Hi, I have two database in different servers and i need to access one db object in another db. for ex, server1 (db1) and server2(db2(tableA,tableB) ) I will be writing a stored procedure in in db1 and i wanted to access the TableA's data of db2. i am
-
View file stored in Database in client machine
Hi, I am using oralce forms Release 10.2.0.1.0 . In my application , files (.xls,.pdf,doc,gif etc) will be stored in Database table as BLOB. I have to add the provison to view the file in client browser. I tried using the webutil function to transfer
-
Movies will play on my ipod but there is no sound
After downloading movies to my computer I can play them in quicktime player. I can download them to itunes, but when I put them on my ipod after converting them the sound doesn't play. I figured that the sound doesn't play because it says its "muxed"
-
Hi, I saw a post on this question from Jan '06, but the answer was in php not asp. The question is: How do I go about adding a link to a MP3 file so that when it is clicked on, it does not play in the visitor's default music player, but brings up the
-
Is there a way to permanently block a specific open wifi network?
Is there a way to permanently block a specific open wifi network?