Access external xml using xslt document function return 401

Posted by Ciprian Grosu on Stack Overflow See other posts from Stack Overflow or by Ciprian Grosu
Published on 2010-04-19T07:45:27Z Indexed on 2010/04/20 4:23 UTC
Read the original article Hit count: 369

On MOSS2007, I have a webpart that display the content of a xml feed. I use a xslt with parameters for transforamtions. There is a situation when I receive a 401 Authorisation exception. I realize that this happen when a document() function from my xslt try to open an external xml. If I try to open this xml in browser all work ok. I provided my admin credentials to the web part and to the XmlSecureResolver. Same problem. The webpart is on server1 and the xml feed and external xml required by xslt is on server2.

What can be ?

  protected override void RenderContents(HtmlTextWriter writer)
{
    base.RenderContents(writer);

    if (string.IsNullOrEmpty(this.xmlUrl) || this.xmlResponseStream == null)
        return;

    try
    {
        XslCompiledTransform transform = new XslCompiledTransform();
        if (UseXslt)
        {
            XmlTextReader stylesheet = null;

            try
            {
                SPSite site = new SPSite(xsltlUrl);
                SPWeb web = site.OpenWeb();

                SPFile file = web.GetFile(xsltlUrl);
                if (file != null)
                {
                    stylesheet = new XmlTextReader(file.OpenBinaryStream());
                }

            }
            catch(Exception ex)
            {
                stylesheet = new XmlTextReader(xsltlUrl);
            }                    

            if (stylesheet != null)
            {
                transform.Load(stylesheet, new XsltSettings(true, true), GetAResolver());
            }

            using (XmlReader reader = new XmlTextReader(this.xmlResponseStream))
            {
                string theParams = xsltProperties;

                XsltArgumentList xslAgrs = GetXsltArgumentList(xsltProperties); 

                XmlTextWriter results = new XmlTextWriter(writer.InnerWriter);
                if (UseProperties)
                {
                    transform.Transform(reader, xslAgrs, results, GetASecureResolver());
                }
                else
                {
                    transform.Transform(reader, results);
                }

                reader.Close();
            }
        }
        else
        {
            string feedAsString = null;
            using (StreamReader rssReader = new StreamReader(this.xmlResponseStream))
            {
                feedAsString = rssReader.ReadToEnd();
                writer.InnerWriter.Write(SPHttpUtility.HtmlEncode(feedAsString));
            }
        }               
    }
    catch (Exception ex)
    {
        writer.Write(ex.Message);
        if (this.xmlResponseStream != null)
        {
            this.xmlResponseStream.Close();
            this.xmlResponseStream.Dispose();
        }
    }
}

    private static XmlSecureResolver GetASecureResolver()
    {
        // Create a secure resolver
        XmlSecureResolver resolver = new XmlSecureResolver(new XmlUrlResolver(), "http://externalservername.com/thesite/");

        string proxyUserName = RssFeedUtility.GetConfigFileReader().ProxyUserName;
        string proxyUserPwd = RssFeedUtility.GetConfigFileReader().ProxyUserPassword;
        string proxyUserDomain = RssFeedUtility.GetConfigFileReader().ProxyUserDomain;

        resolver.Credentials = new NetworkCredential(proxyUserName, proxyUserPwd, proxyUserDomain);

        return resolver;
    }

© Stack Overflow or respective owner

Related posts about sharepoint

Related posts about transformation