예제 #1
0
        private void LoadSetting()
        {
            XMLTransformer.ClearTransformerCache();

            this.textBoxURI.Text    = Program.Context.ConfigMgr.Config.SOAPServiceURI;
            this.textBoxAction.Text = Program.Context.ConfigMgr.Config.SOAPAction;
        }
예제 #2
0
        //internal bool XSLTTransform(string sourceXml, ref string targetXml, string xsltFileName, bool enableExtension)
        //{
        //    string xslFile = ConfigHelper.GetFullPath(Program.AppArgument.ConfigFilePath, xsltFileName);
        //    XMLTransformer it = XMLTransformer.CreateFromFileWithCache(xslFile, Program.Log, enableExtension);
        //    return it.TransformString(sourceXml, ref targetXml, enableExtension ? XSLTExtensionTypes.XmlNodeTransformer : XSLTExtensionTypes.None);
        //}

        internal bool XSLTTransform(string sourceXml, ref string targetXml, string xsltFileName, bool enableExtension)
        {
            string         xslFile = ConfigHelper.GetFullPath(_contextForTemplate2.AppArgument.ConfigFilePath, xsltFileName);
            XMLTransformer it      = XMLTransformer.CreateFromFileWithCache(xslFile, _contextForTemplate2.Log, enableExtension);

            Message sourceMsg = new Message();

            sourceMsg.Body = sourceXml;

            string targetMsgXml = null;
            string sourceMsgXml = sourceMsg.ToXMLString();
            bool   res          = it.TransformString(sourceMsgXml, ref targetMsgXml, enableExtension ? XSLTExtensionTypes.XmlNodeTransformer : XSLTExtensionTypes.None);

            if (res)
            {
                Message targetMsg = XObjectManager.CreateObject <Message>(targetMsgXml);
                if (targetMsg != null)
                {
                    targetXml = targetMsg.Body;
                }
                else
                {
                    _contextForTemplate2.Log.Write(LogType.Error, "Cannot parse xml string to message object. \r\n" + targetMsgXml);
                    res = false;
                }
            }

            return(res);
        }
예제 #3
0
        private MSG.Message TransformToCSBDataSetSchemedXDSGWMessage(MSG.Message msg, string msgID)
        {
            if (!_entity.Context.ConfigMgr.Config.EnableXMLTransform)
            {
                return(msg);
            }

            _entity.Context.Log.Write("Begin transforming XDSGW message.");
            string         file = ConfigHelper.GetFullPath(_entity.Context.AppArgument.ConfigFilePath, _entity.Context.ConfigMgr.Config.XSLTFilePath);
            XMLTransformer t    = XMLTransformer.CreateFromFileWithCache(file, _entity.Context.Log);

            if (t == null)
            {
                return(null);
            }

            string csbMsgXml   = "";
            string otherMsgXml = msg.ToXMLString();

            if (!t.TransformString(otherMsgXml, ref csbMsgXml, XSLTExtensionTypes.None))
            {
                return(null);
            }

            MSG.Message csbMsg = XObjectManager.CreateObject <MSG.Message>(csbMsgXml);
            if (csbMsg == null)
            {
                _entity.Context.Log.Write(LogType.Error, "Cannot deserialize the transformed XML into XDSGW message.");
                string fname = string.Format("{0}_transformed", msgID);
                DumpErrorMessage(csbMsgXml, fname);
            }

            _entity.Context.Log.Write("Finish transforming XDSGW message.");
            return(csbMsg);
        }
예제 #4
0
        public static List <XIMWrapper> Transform(XMLTransformer transformer, List <DataSet> dataSetList)
        {
            if (transformer == null || dataSetList == null)
            {
                return(null);
            }
            List <XIMWrapper> resultList = new List <XIMWrapper>();

            foreach (DataSet ds in dataSetList)
            {
                StringBuilder sb = new StringBuilder();
                StringWriter  sw = new StringWriter(sb);
                ds.WriteXml(sw);
                string xml = sb.ToString();

                string str = "";
                if (transformer.TransformString(xml, ref str))
                {
                    XIMWrapper w = new XIMWrapper(str);
                    w.GUIDList.Add(ConfigMain.GetGUID(ds));
                    resultList.Add(w);
                }
            }
            return(resultList);
        }
예제 #5
0
        internal bool XSLTTransform(string sourceXml, ref string targetXml, string xsltFileName)
        {
            string         xslFile = ConfigHelper.GetFullPath(_contextForTemplate.AppArgument.ConfigFilePath, xsltFileName);
            XMLTransformer it      = XMLTransformer.CreateFromFileWithCache(xslFile, _contextForTemplate.Log);

            return(it.TransformString(sourceXml, ref targetXml, XSLTExtensionTypes.None));
        }
예제 #6
0
        /// <summary>
        /// In order to support including multiple XSLT files in the XSLT script,
        /// we disable the external extension (e.g. calling C# code from XSLT) currently.
        /// </summary>
        /// <param name="sourceMsg"></param>
        /// <param name="targetMsg"></param>
        /// <param name="rootFolderPath"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public bool TransformMessage(Message sourceMsg, out Message targetMsg, string rootFolderPath, ILog log)
        {
            targetMsg = null;
            if (sourceMsg == null)
            {
                return(false);
            }

            string xslFilePath = XSLTFileLocation;

            if (!Path.IsPathRooted(xslFilePath))
            {
                xslFilePath = Path.Combine(rootFolderPath, xslFilePath);
            }
            XMLTransformer t = XMLTransformer.CreateFromFileWithCache(xslFilePath, log, EnableXSLTExtension);

            if (t == null)
            {
                return(false);
            }

            string targetString = null;
            string sourceString = sourceMsg.ToXMLString();

            if (!t.TransformString(sourceString, ref targetString, XSLTExtensionTypes.None) ||
                string.IsNullOrEmpty(targetString))
            {
                return(false);
            }

            targetMsg = XObjectManager.CreateObject <Message>(targetString);
            return(targetMsg != null);
        }
예제 #7
0
        private void LoadSetting()
        {
            //_receiver = new SOAPReceiver(Path.Combine(Application.StartupPath, "HYS.IM.MessageDevices.SOAPAdapter.SOAPServer.exe.config"), Program.Log);
            _receiver = new SOAPReceiver(Program.Context.ConfigMgr.Config, Program.Context.ConfigMgr.Config.GetWCFConfigFileNameWithFullPath(), Program.Context.Log, true);
            _receiver.OnMessageReceived += new ReceiveSOAPMessageHandler(SOAPReceiver_OnMessageReceived);
            _controler = new SOAPServerControler(Program.Context);

            XMLTransformer.ClearTransformerCache();

            this.textBoxURI.Text = Program.Context.ConfigMgr.Config.SOAPServiceURI;
        }
예제 #8
0
        private void buttonHL7toXML_Click(object sender, EventArgs e)
        {
            string         hl7Msg = this.textBoxSourceXml.Text.Trim();
            string         xmlMsg = "";
            XMLTransformer t      = XMLTransformer.CreateFromFile(this.textBoxXSLTPath.Text.Trim(), _log);

            if (t.TransformString(hl7Msg, ref xmlMsg, XSLTExtensionTypes.None))
            {
                this.textBoxXmlMsg.Text = xmlMsg;
            }
            else
            {
                _log.Write("Transforming fialed.");
            }
        }
예제 #9
0
        public static string[] Transform(XMLTransformer transformer, List <XmlNode> nodeList)
        {
            if (transformer == null || nodeList == null)
            {
                return(null);
            }
            List <string> list = new List <string>();

            foreach (XmlNode node in nodeList)
            {
                string outXML = "";
                string inXML  = node.OuterXml;
                if (transformer.TransformString(inXML, ref outXML))
                {
                    list.Add(outXML);
                }
            }
            return(list.ToArray());
        }
예제 #10
0
        private void Form1_Load(object sender, EventArgs e)
        {
            _ieCtrlGC  = new IEControler(this, this.textBoxGCXml, this.checkBoxGC, true);
            _ieCtrlIn  = new IEControler(this.panelIn, this.textBoxInXML, this.checkBoxIn, true);
            _ieCtrlOut = new IEControler(this.panelOut, this.textBoxOutXML, this.checkBoxOut, true);

            _transformer = XMLTransformer.CreateFromFile(Program.XSLFileName);
            if (_transformer == null)
            {
                MessageBox.Show(XMLTransformer.LastErrorInfor);
            }

            _transformerOut = XMLTransformer.CreateFromFile(Program.XSLFileNameOut);
            if (_transformerOut == null)
            {
                MessageBox.Show(XMLTransformer.LastErrorInfor);
            }

            using (StreamReader sr = File.OpenText(Program.XMLFileName))
            {
                this.textBoxInXML.Text = sr.ReadToEnd();
            }
        }
예제 #11
0
        private void buttonTransformOut_Click(object sender, EventArgs e)
        {
            XMLTransformer transformer = XMLTransformer.CreateFromFile(this.textBoxXSLPathOut.Text.Trim());

            if (transformer == null)
            {
                MessageBox.Show(XMLTransformer.LastErrorInfor);
                return;
            }

            this.listBoxItemOut.Items.Clear();
            List <DataSet> dsList = new List <DataSet>();

            foreach (DataSetWrapper ds in this.listBoxDataSetOut.Items)
            {
                dsList.Add(ds.DataSet);
            }
            string[] strList = Transform(transformer, dsList);
            foreach (string str in strList)
            {
                this.listBoxItemOut.Items.Add(str);
            }
        }
예제 #12
0
        private static string[] Transform(XMLTransformer transformer, List <DataSet> dataSetList)
        {
            if (transformer == null || dataSetList == null)
            {
                return(null);
            }
            List <string> resultList = new List <string>();

            foreach (DataSet ds in dataSetList)
            {
                StringBuilder sb = new StringBuilder();
                StringWriter  sw = new StringWriter(sb);
                ds.WriteXml(sw);
                string xml = sb.ToString();

                string str = "";
                if (transformer.TransformString(xml, ref str))
                {
                    resultList.Add(str);
                }
            }
            return(resultList.ToArray());
        }
예제 #13
0
        private void buttonTransform_Click(object sender, EventArgs e)
        {
            XMLTransformer transformer = XMLTransformer.CreateFromFile(this.textBoxXSLPath.Text.Trim());

            if (transformer == null)
            {
                MessageBox.Show(XMLTransformer.LastErrorInfor);
                return;
            }

            this.listBoxDataSet.Items.Clear();
            List <XmlNode> list = new List <XmlNode>();

            foreach (XmlNode node in this.listBoxItem.Items)
            {
                list.Add(node);
            }
            string[] xmlList = Transform(transformer, list);
            foreach (string xml in xmlList)
            {
                this.listBoxDataSet.Items.Add(xml);
            }
        }
예제 #14
0
        private bool _entity_OnRequest(string receiveData, ref string sendData)
        {
            //receiveData = SocketHelper.DeleteEOF(receiveData, _entity.Config.ReceiveEndSign);
            //sendData = receiveData.Replace('#', '$');
            //return;

            //using (StreamWriter sw = File.CreateText("d:\\msg.txt"))
            //{
            //    sw.Write(receiveData);
            //}

            string msgContent = XIMServerHelper.GetMessageContent(receiveData);

            if (msgContent == null || msgContent.Length < 1)
            {
                string strErrMsg = "Request message does not exist in request data";
                Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                sendData = XIMServerHelper.GetResponseFailed(XIMTransformHelper.GetTransactionID(), strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                return(false);
            }

            string            strName          = "";
            string            strQualifier     = "";
            string            strTransactionID = "";
            XIMInboundMessage msgConfig        = XIMServerHelper.GetMessageConfiguration(msgContent, ref strName, ref strQualifier, ref strTransactionID);

            if (msgConfig == null)
            {
                string strErrMsg = "Cannot find mapping rule configuration for current message (Name:" + strName + ", Qualifier:" + strQualifier + ").";
                Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                return(false);
            }

            XMLTransformer transformer = XMLTransformer.CreateFromMessage(msgConfig);

            if (msgConfig == null)
            {
                string strErrMsg = "Cannot find mapping XSL file for current message (XSL File:" + msgConfig.XSLFileName + ").";
                Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                return(false);
            }

            List <XmlNode> nodeList = new List <XmlNode>();

            XIMServerHelper.SplitItem(nodeList, msgContent);
            Program.Log.Write(nodeList.Count.ToString() + " XIM Item(s) are found in request message", XIMServerHelper.ModuleName);
            XIMServerHelper.SplitProcedureStep(nodeList);
            Program.Log.Write(nodeList.Count.ToString() + " XIM Item(s) splited by SPS are found in request message", XIMServerHelper.ModuleName);

            if (nodeList.Count > 0)
            {
                string[] dataSetXmlList = XIMServerHelper.Transform(transformer, nodeList);
                DataSet  dataSet        = XIMServerHelper.CreateDataSet(dataSetXmlList);
                if (dataSet == null)
                {
                    string strErrMsg = "Failed to transform to Data Set for current message.";
                    Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                    sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                    return(false);
                }

                if (_service.SaveData(msgConfig.Rule, dataSet))
                {
                    Program.Log.Write("Save to GC Gateway database succeeded.");
                    sendData = XIMServerHelper.GetResponseSuccess(strTransactionID, Program.ConfigMgt.Config.SocketConfig);
                    return(true);
                }
                else
                {
                    string strErrMsg = "Save to GC Gateway database failed.";
                    Program.Log.Write(LogType.Error, strErrMsg, XIMServerHelper.ModuleName);
                    sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                    return(false);
                }
            }

            return(false);
        }
예제 #15
0
        private void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            _timer.Stop();
            Program.Log.Write("# Timer tick begin.", XIMClientHelper.ModuleName);

            int index = 0;

            foreach (XIMOutboundMessage msg in Program.ConfigMgt.Config.Messages)
            {
                try
                {
                    index++;
                    List <XIMWrapper> resultList = null;
                    string            strPrefix  = "(" + index.ToString() + ") ";
                    Program.Log.Write(strPrefix + "Begin processing message (" + msg.GWEventType.ToString() + ") to (" + msg.HL7EventType.ToString() + ").", XIMClientHelper.ModuleName);

                    #region Data Processing

                    DataSet dataSet = _service.RequestData(msg.Rule, null);
                    if (dataSet == null)
                    {
                        Program.Log.Write(LogType.Warning, "Query data from GC Gateway database failed.");
                    }
                    else
                    {
                        List <DataSet> splitedDataSet = XIMClientHelper.SplitDataSet(dataSet);
                        if (splitedDataSet == null || splitedDataSet.Count < 1)
                        {
                            Program.Log.Write(LogType.Warning, "No record found in GC Gateway database query result.");
                        }
                        else
                        {
                            Program.Log.Write(strPrefix + "Query data from GC Gateway database succeeded (Record count:" + splitedDataSet.Count.ToString() + ").");
                            XMLTransformer transformer = XMLTransformer.CreateFromMessage(msg);
                            if (transformer == null)
                            {
                                Program.Log.Write(LogType.Warning, "Cannot find mapping XSL file for current message (XSL File:" + msg.XSLFileName + ").");
                            }
                            else
                            {
                                resultList = XIMClientHelper.Transform(transformer, splitedDataSet);
                                if (resultList == null || resultList.Count < 1)
                                {
                                    Program.Log.Write(LogType.Warning, "Transform from DataSet xml to XIM xml failed (XSL File:" + msg.XSLFileName + ").");
                                }
                                else
                                {
                                    Program.Log.Write(strPrefix + "Transform from DataSet xml to XIM xml succeeded (Document count:" + resultList.Count.ToString() + ").");
                                    if (resultList.Count > 1 && Program.ConfigMgt.Config.EnableDataMerging)
                                    {
                                        int pkIndex = Program.ConfigMgt.Config.DataMergingPKIndex;
                                        resultList = XIMClientHelper.MergeProcedureStep(resultList, pkIndex);
                                        if (resultList == null || resultList.Count < 1)
                                        {
                                            Program.Log.Write(LogType.Warning, "SPS merging failed (PK Index:" + pkIndex.ToString() + ").");
                                        }
                                        else
                                        {
                                            Program.Log.Write(strPrefix + "SPS merging succeeded (PK Index:" + pkIndex.ToString() + ") (Document count:" + resultList.Count.ToString() + ").");
                                        }
                                    }
                                    else
                                    {
                                        Program.Log.Write(strPrefix + "Skip SPS merging.");
                                    }
                                }
                            }
                        }
                    }

                    #endregion

                    #region Data Sending

                    if (resultList == null || resultList.Count < 1)
                    {
                        Program.Log.Write(LogType.Warning, "No availiable XIM document, skip data sending.");
                    }
                    else
                    {
                        int ximIndex = 1;
                        Program.Log.Write(strPrefix + "Sending XIM document...");
                        foreach (XIMWrapper xim in resultList)
                        {
                            string ximLogIndex = "(" + (ximIndex++).ToString() + "/" + resultList.Count.ToString() + ")";

                            bool result = false;
                            if (Program.ConfigMgt.Config.OutboundToFile)
                            {
                                result = !XIMClientHelper.SaveToFile(Program.ConfigMgt.Config, xim.XIMDocument);
                            }
                            else
                            {
                                SocketResult res = SocketHelper.SendData(Program.ConfigMgt.Config.SocketConfig, xim.XIMDocument);
                                result = (res == null || res.Type != SocketResultType.Success);
                            }

                            if (result)
                            {
                                Program.Log.Write(LogType.Warning, "Send XIM document failed. " + ximLogIndex);
                            }
                            else
                            {
                                Program.Log.Write(strPrefix, "Send XIM document succeeded. " + ximLogIndex);
                                if (_service.DischargeData(xim.GUIDList.ToArray()))
                                {
                                    Program.Log.Write(strPrefix, "Discharge data succeeded. " + ximLogIndex);
                                }
                                else
                                {
                                    Program.Log.Write(LogType.Warning, "Discharge data failed. " + ximLogIndex);
                                }
                            }
                        }
                        Program.Log.Write(strPrefix + "Send XIM document completed.");
                    }

                    #endregion

                    Program.Log.Write(strPrefix + "End processing message.", XIMClientHelper.ModuleName);
                }
                catch (Exception err)
                {
                    Program.Log.Write(err);
                }
            }

            Program.Log.Write("# Timer tick end.", XIMClientHelper.ModuleName);
            _timer.Start();
        }