尝试调用com.sap.aii.mapping.api.TransformationInput.getInputParameters()方法时发生NullPointerException

时间:2018-12-05 17:01:22

标签: java nullpointerexception this sap parameterized

我已经为SAP PI 7.5中的参数化Java映射编写了以下Java代码。参数由操作映射中指定的标签名称绑定(BS_NAME,CHANNEL_NAME,EMAIL)。

在使用有效负载测试OM的“测试”选项卡中的以下Java映射时,会出现以下错误: NullPointerException,同时尝试调用从本地变量“ this ”加载的对象的字段加载的空对象的com.sap.aii.mapping.api.TransformationInput.getInputParameters()方法

我调试了代码,但没有发现问题。希望你们所有的专家团队都能对此有所启发。

请在下面找到XmlNFe_To_Mail类的Java代码。 BodyText类也用于获取某些内容。 XmlNFe_To_Mail类中遇到错误。

package nfeb2b.test;

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.util.Map;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.Text;

import org.xml.sax.SAXException;

import com.sap.aii.mapping.api.AbstractTrace;

import com.sap.aii.mapping.api.AbstractTransformation;

import com.sap.aii.mapping.api.StreamTransformationException;

import com.sap.aii.mapping.api.TransformationInput;

import com.sap.aii.mapping.api.TransformationOutput;

import com.sap.aii.mapping.lookup.Channel;

import com.sap.aii.mapping.lookup.LookupService;

import com.sap.aii.mapping.lookup.RfcAccessor;

import com.sap.aii.mapping.lookup.XmlPayload;

public  class XmlNFe_To_Mail extends AbstractTransformation 
    {

                private String prefixoSubject = new String();

                private String emailFrom = new String();

                private String prefixoDocumento = new String();

                private String frase = new String();

                private String gap = "\n\r";

                private AbstractTrace trace = null;

                private Map map = null;

                private String BSSystem ="";

                private String ComChannel = "";

                private String Emails = "";

                private final String NFE_EMPRESA = "NFE Company: ";

                private final String NFe = "NFE";

                private final String NFe_Mail = "nfe@company.com";

                TransformationInput input = null;

                TransformationOutput output = null;

               public void execute(InputStream in, OutputStream out) throws StreamTransformationException 
                            {

                                // TODO Auto-generated method stub

                                {

                                       BSSystem = input.getInputParameters().getString("BS_NAME");

                                       ComChannel = input.getInputParameters().getString("CHANNEL_NAME");

                                       Emails= input.getInputParameters().getString("EMAIL");

                                      try

                                        {

                                          configParamEmail();

                                          BufferedReader inpxml = new BufferedReader(new InputStreamReader(in));

                                          StringBuffer buffer = new StringBuffer();

                                          String line = "";

                                          String quebra = System.getProperty("line.separator");

                                        while ((line = inpxml.readLine()) != null) 
                                            {

                                                    line.replaceAll("\r\n", "");

                                                    line.replaceAll(quebra, "");

                                                    line.replaceAll(" />", "/>");

                                                    line.replaceAll(" />", "/>");

                                                    line.replaceAll(" />", "/>");

                                                    buffer.append(line);

                                                         }



                                               String inptxml = buffer.toString();

                                               inptxml = inptxml.replace("\r\n", "");

                                               inptxml = inptxml.replaceAll(quebra, "");

                                               inptxml = inptxml.replaceAll(" />", "/>");

                                               inptxml = inptxml.replaceAll(" />", "/>");

                                                inptxml = inptxml.replaceAll(" />", "/>");



                                                String idNFe = "";

                                                String numeroNF = "";

                                                String idEvent = "";

                                                idNFe = inptxml.substring(inptxml.indexOf("<chNFe>") + 7, inptxml.indexOf("</chNFe>"));

                                                numeroNF = idNFe.substring(25, 34);

                                                 if (inptxml.indexOf("infEvento") > 0) {

                                                    idEvent = inptxml.substring(inptxml.indexOf("<tpEvento>") + 10, inptxml.indexOf("</tpEvento>"));

                                                if (idEvent.length() > 0) {
                                                    if (idEvent.equals("111111")) {
                                                            this.setPrefixoDocumento(this.getPrefixoDocumento().replaceAll("NFE", "CancNFe"));
                                                            this.setPrefixoSubject(this.getPrefixoSubject().replaceAll("NFE", "NFE CANCELADA"));
                                                        } else if (idEvent.equals("100000")) {
                                                            this.setPrefixoDocumento(this.getPrefixoDocumento().replaceAll("NFE", "CCE"));
                                                            this.setPrefixoSubject(this.getPrefixoSubject().replaceAll("NFE", "CCE"));
                                                        } else {
                                                            this.setPrefixoDocumento(this.getPrefixoDocumento().replaceAll("NFE", "ManDest"));
                                                            this.setPrefixoSubject(this.getPrefixoSubject().replaceAll("NFE", "MANIFESTO"));
                                                        }

                                                      }

                                                 }

                                                Channel chn = null;

                                                RfcAccessor rfc = null;

                                                String email = "";

                                                String pdf = "";

                                                chn = LookupService.getChannel(getBSystem(),getCChannel());

                                                rfc = LookupService.getRfcAccessor(chn);

                                                String req = "<ns0:TEST_NFE_MAIL_OPT xmlns:ns0='urn:sap-com:document:sap:rfc:functions'><I_ACCESS_KEY>"

                                                                                                + idNFe + "<I_ACCESS_KEY></ns0:ZOTC_NFE_EMAIL_OUTPUT>";



                                                InputStream inputRFC = new ByteArrayInputStream(req.getBytes("UTF-8"));

                                                XmlPayload rfcPayload = LookupService.getXmlPayload(inputRFC);

                                                XmlPayload result = rfc.call(rfcPayload);

                                                InputStream resp = result.getContent();

                                                DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

                                                Document doc = builder.parse(resp);

                                                Node node = (Node) doc.getElementsByTagName("E_EMAIL").item(0);

                                                if (node.hasChildNodes() && !node.getFirstChild().getNodeValue().equals("")) 
                                                {
                                                    email = node.getFirstChild().getNodeValue();

                                                }                            

                                                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

                                                 DocumentBuilder db = dbf.newDocumentBuilder();

                                                 TransformerFactory tf = TransformerFactory.newInstance();

                                                 Transformer transform = tf.newTransformer();


                                                 Document docout = db.newDocument();

                                                 Element root = docout.createElement("ns0:Mail");

                                                root.setAttribute("xmlns:ns0", "http://sap.com/xi/XI/Mail/30");

                                                docout.appendChild(root);


                                                Element subject = docout.createElement("Subject");

                                                root.appendChild(subject);

                                                Text subjectText = docout.createTextNode(getPrefixoSubject() + numeroNF); 

                                                subject.appendChild(subjectText);



                                                Element from = docout.createElement("From");

                                                root.appendChild(from);

                                               Text fromText = docout.createTextNode(getEmailFrom()); 

                                                 from.appendChild(fromText);

                                                if (email.length() > 0) 
                                                {
                                                email += ";"; 
                                                } else {
                                                email = this.getEmaillist();
                                                }


                                                 Element to = docout.createElement("To");

                                                 root.appendChild(to);

                                                 Text toText = docout.createTextNode(email); 

                                                to.appendChild(toText);



                                                Element contentType = docout.createElement("Content_Type");

                                                root.appendChild(contentType);

                                                Text contentTypeText = docout.createTextNode("multipart/mixed;boundary=--AaZz");

                                                contentType.appendChild(contentTypeText);


                                                BodyText texto = new BodyText(idNFe, getFrase(), inptxml, pdf);

                                                Element content = docout.createElement("Content");

                                                root.appendChild(content);

                                                Text contentText = null;



                                                         if ("NFE Company: ".equalsIgnoreCase(getPrefixoSubject())) {

                                                            contentText = docout.createTextNode(texto.getnfeText());

                                                                }


                                                           else if ("NFE CANCELADA Company: ".equalsIgnoreCase(getPrefixoSubject())) {

                                                             contentText = docout.createTextNode(texto.getCnfeText());

                                                                 }

                                                            else if ("CCE Company: ".equalsIgnoreCase(getPrefixoSubject())) {

                                                              contentText = docout.createTextNode(texto.getcceText());

                                                                                }

                                                                content.appendChild(contentText);

                                                                DOMSource domS = new DOMSource(docout);

                                                                transform.transform((domS), new StreamResult(out));    

                                                                }

                                                                catch (IOException e) {

                                                                   // TODO Auto-generated catch block

                                                                   e.printStackTrace();

                                                                 } catch (ParserConfigurationException e) {

                                                                   // TODO Auto-generated catch block

                                                                     e.printStackTrace();

                                                                  } catch (TransformerConfigurationException e) {

                                                                      // TODO Auto-generated catch block

                                                                      e.printStackTrace();

                                                                    } catch (TransformerException e) {

                                                                        // TODO Auto-generated catch block

                                                                        e.printStackTrace();

                                                                      } catch (SAXException e) {

                                                                       // TODO Auto-generated catch block
                                                                        e.printStackTrace();
                                                                                }
                                                                        catch (Exception e) {

                                                                        // Exception Handling }

                                                                                }

                                                }

                }



                public String getGap() {

                return gap;

                }



                public void setGap(String gap) {

                 this.gap = gap;

                }

                public String getFrase() {

                return frase;

                }

                public void setFrase(String frase) {

                this.frase = frase;

                }

              public String getBSystem(){

                return BSSystem;

                }

                public String getEmaillist(){

                 return Emails;

                }


                public String getCChannel() {

                  return ComChannel;

                }

                public String getPrefixoSubject() {

                 return prefixoSubject;

                }

                public void setPrefixoSubject(String prefixoSubject) {

                 this.prefixoSubject = prefixoSubject;

                }

                public String getEmailFrom() {

                 return emailFrom;

                }

                public void setEmailFrom(String emailFrom) {

                this.emailFrom = emailFrom;

                }

                public String getPrefixoDocumento() {

                return prefixoDocumento;

                }

                public void setPrefixoDocumento(String prefixoDocumento) {

                 this.prefixoDocumento = prefixoDocumento;

                }


                private void configParamEmail() {

                                setEmailFrom(NFe_Mail);

                                setPrefixoDocumento(NFe);

                                setPrefixoSubject(NFE_EMPRESA);
                }

                @Override

                public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {



                                this.execute(in.getInputPayload().getInputStream(), out.getOutputPayload().getOutputStream());



                }


                /*public void setParameter(Map arg0) {

                                // TODO Auto-generated method stub



                }*/




}

请让我知道应该进行哪些更改。 谢谢。

1 个答案:

答案 0 :(得分:0)

TransformationInput / TransformationOutput类中缺少实例,因为它们的变量为空,

   TransformationInput input = null;               
   TransformationOutput output = null;

因此,您需要对它们进行实例化或将其作为参考传递给某些设置器。