예제 #1
0
        private XMLTransformer GetXMLTransformer(string key)
        {
            if (_responseTransformerList == null)
            {
                _responseTransformerList = new Dictionary <string, XMLTransformer>();
            }

            if (_responseTransformerList.ContainsKey(key))
            {
                return(_responseTransformerList[key]);
            }
            else
            {
                string xsltFileName = GetXsltFileName(key);
                if (xsltFileName == null)
                {
                    return(null);
                }

                XMLTransformer t = XMLTransformer.CreateFromFile(xsltFileName, _context.Log);
                if (t == null)
                {
                    return(null);
                }

                _responseTransformerList.Add(key, t);
                return(t);
            }
        }
예제 #2
0
        public string GetPublishResponseMessageContent(string xsltFileName, string sourceXml)
        {
            bool   res       = false;
            string targetXml = "";

            _context.Log.Write(string.Format("Begin generating response message with file: {0}.", xsltFileName));
            string         xslFile = ConfigHelper.GetFullPath(_context.AppArgument.ConfigFilePath, xsltFileName);
            XMLTransformer it      = XMLTransformer.CreateFromFileWithCache(xslFile, _context.Log);

            res = it.TransformString(sourceXml, ref targetXml,
                                     _context.ConfigMgr.Config.InboundMessageDispatching.XSLTExtensionsForGeneratingResponse);
            _context.Log.Write(string.Format("End generating response message with file: {0}. Result: {1}", xsltFileName, res));

            return(targetXml);
        }
예제 #3
0
        public static XMLTransformer CreateFromFileWithCache(string xslFileName, ILog log)
        {
            if (xslFileName == null)
            {
                return(null);
            }
            XMLTransformer t = _transformerList[xslFileName] as XMLTransformer;

            if (t == null)
            {
                t = CreateFromFile(xslFileName, log);
                if (t != null)
                {
                    _transformerList.Add(xslFileName, t);
                }
            }
            return(t);
        }
예제 #4
0
        public bool GenerateSOAPMessage(Message msg, out string soapEnvelope)
        {
            soapEnvelope = "";

            if (msg == null || msg.Header == null)
            {
                return(false);
            }
            string msgID = msg.Header.ID.ToString();

            switch (_context.ConfigMgr.Config.OutboundProcessing.Model)
            {
            case MessageProcessModel.Direct:
            {
                _context.Log.Write(string.Format("Use the message body as SOAP envelop directly. Message ID: {0}", msgID));
                soapEnvelope = msg.Body;
                return(true);
            }

            case MessageProcessModel.Xslt:
            {
                string strSoap = "";
                string strMsg  = msg.ToXMLString();

                _context.Log.Write(string.Format("Begin transforming XDS Gateway message to SOAP message. Message ID: {0}", msgID));

                XMLTransformer t = XMLTransformer.CreateFromFileWithCache
                                       (_context.ConfigMgr.Config.GetXSLTFileFullPath_XDSGatewayMessageToSOAPMessage(),
                                       _context.Log);

                bool res = (t != null &&
                            t.TransformString(strMsg, ref strSoap,
                                              _context.ConfigMgr.Config.OutboundProcessing.XSLTExtensions));

                _context.Log.Write(string.Format("End transforming XDS Gateway message to SOAP message. Message ID: {0}. Result: {1}", msgID, res));

                soapEnvelope = strSoap;
                return(res);
            }
            }

            return(false);
        }
예제 #5
0
        public string GetSampleResponseMessageContent(string key, string xmlString)
        {
            string str = "";
            bool   res = false;

            _context.Log.Write(string.Format("Begin generating response message for requesting message with key: {0}.", key));

            XMLTransformer t = GetXMLTransformer(key);

            if (t == null)
            {
                _context.Log.Write(LogType.Error, "Cannot find any template to generate response message, return an empty message any way.");
                str = "<Message><Header/><Body/></Message>";
            }
            else
            {
                res = t.TransformString(xmlString, ref str,
                                        _context.ConfigMgr.Config.InboundMessageDispatching.XSLTExtensionsForGeneratingResponse);
            }

            _context.Log.Write(string.Format("End generating response message for requesting message with key: {0}. Result: {1}", key, res));

            return(str);
        }
예제 #6
0
        private bool GenerateXDSGWMessage(string soapEnvelope, out Message msg, out string xdsgwMsg, bool returnMsgObject, bool returnMsgString)
        {
            msg      = null;
            xdsgwMsg = "";

            if (soapEnvelope == null || soapEnvelope.Length < 1)
            {
                return(false);
            }

            switch (_context.ConfigMgr.Config.InboundProcessing.Model)
            {
            case MessageProcessModel.Direct:
            {
                msg           = new Message();
                msg.Header.ID = Guid.NewGuid();
                //msg.Header.Type = MessageRegistry.GENERIC_ResponseMessageType;    // do not need to set message type here, set message type when dispatching messages.
                msg.Body = Message.RemoveXmlHeader(soapEnvelope);

                if (returnMsgString)
                {
                    xdsgwMsg = msg.ToXMLString();
                }

                _context.Log.Write(string.Format("Use the SOAP envelope as XDS Gateway message body directly. Message ID: {0}", msg.Header.ID.ToString()));

                return(true);
            }

            case MessageProcessModel.Xslt:
            {
                string strMsg = "";

                _context.Log.Write("Begin transforming SOAP message to XDS Gateway message. ");

                XMLTransformer t = XMLTransformer.CreateFromFileWithCache
                                       (_context.ConfigMgr.Config.GetXSLTFileFullPath_SOAPMessageToXDSGatewayMessage(),
                                       _context.Log);

                bool res = (t != null &&
                            t.TransformString(soapEnvelope, ref strMsg,
                                              _context.ConfigMgr.Config.InboundProcessing.XSLTExtensions));

                _context.Log.Write(string.Format("End transforming SOAP message to XDS Gateway message. Result: {0}", res));

                if (!res)
                {
                    return(false);
                }

                if (returnMsgString)
                {
                    xdsgwMsg = strMsg;
                    return(true);
                }
                else if (returnMsgObject)
                {
                    msg = CreateXDSGWMessage(strMsg);
                    return(msg != null);
                }

                return(true);
            }
            }

            return(false);
        }