IsoMessage 8583 XML С#

При выполнении я получаю сообщение об ошибке в этом месте.
XDocument doc = XDocument.Parse(BuildIsoMessage.Properties.Resources.Deneme);//Я получаю документ из ресурсов таким образом.

       ` GenericPackager packager = new GenericPackager(doc.ToString());`

An unhandled exception of type 'org.jpos.iso.ISOException' occurred in jpos.dll.Additional information: Error reading <!DOCTYPE isopackager PUBLIC "-//jPOS/jPOS Generic Packager DTD 1.0//EN" "http://jpos.org/dtd/generic-packager-1.0.dtd"[]>

Я пытаюсь создать сообщение ISO в С#. Я преобразовал файлы Jar в один файл dll и использовал некоторые пространства имен using org.jpos.util; using org.jpos.iso; using org.jpos.iso.channel; using org.jpos.iso.packager;, однако я не могу упаковать свой файл xml, он выдает ошибку.

https://github.com/jpos/jPOS/blob/master/jpos/src/main/resources/packager/iso87ascii.xml введите здесь описание изображения


person chatay    schedule 07.11.2017    source источник
comment
кто, черт возьми, поставит мне минус 1? Объясните причину вместо того, чтобы голосовать против.   -  person chatay    schedule 07.11.2017


Ответы (2)


Jpos dll работал нормально, когда указан путь, как показано ниже

Упаковщик GenericValidatingPackager = new GenericValidatingPackager(); packager.readFile("c:/isoxml/iso8583binary.xml");

person Pubudu Ranathunga    schedule 10.11.2017
comment
отличная идея! но теперь выдает эту ошибку Additional information: org.xml.sax.SAXException: SAX2 driver class org.apache.crimson.parser.XMLReaderImpl not found - person chatay; 10.11.2017
comment
Решил проблему скачав apache.crimson и разобрав в dll с другими файлами. @Pubudu, ты мужчина, большое спасибо. - person chatay; 10.11.2017

Это слишком просто, чтобы использовать стороннюю DLL. Используйте xml-линк:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            string xmlHeader =
                "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
                "<!DOCTYPE isopackager PUBLIC" +
                "        \"-//jPOS/jPOS Generic Packager DTD 1.0//EN\"" +
                "        \"http://jpos.org/dtd/generic-packager-1.0.dtd\" >" +

                "<!-- ISO 8583:1987 (ASCII) field descriptions for GenericPackager -->" +

                "<isopackager>" +
                "</isopackager>";


            //<isofield

            XDocument doc = XDocument.Parse(xmlHeader);
            XElement isoPackager = doc.Descendants("isopackager").FirstOrDefault();

            List<IsoField> isoFields = new List<IsoField>() {
                new IsoField() { id= 0, length= 4, name="MESSAGE TYPE INDICATOR", cClass = "org.jpos.iso.IFA_NUMERIC"},
                new IsoField() { id= 1, length= 16, name="BIT MAP", cClass= "org.jpos.iso.IFA_BITMAP"},
                new IsoField() { id= 2, length= 19, name="PAN - PRIMARY ACCOUNT NUMBER", cClass= "org.jpos.iso.IFA_LLNUM"}
                };

            foreach (IsoField isofield in isoFields)
            {
                isoPackager.Add(new XElement("isofield", new object[] {
                    new XElement("id", isofield.id),
                    new XElement("length", isofield.length),
                    new XElement("name", isofield.name),
                    new XElement("class", isofield.cClass)
                }));

            }
            doc.Save(FILENAME);

        }
    }

    public class IsoField
    {
        public int id {get; set;}
        public int length { get; set; }
        public string name { get; set; }
        public string cClass { get; set; }
    }

}
person jdweng    schedule 07.11.2017
comment
это отличный способ создать файл xml, но у меня уже есть созданный файл xml, проблема в том, что GenericPackager packager = new GenericPackager(doc.ToString()); не принимает файл xml. - person chatay; 07.11.2017
comment
Похоже, универсальный упаковщик хочет поток. Итак, считыватель StringReader = new StringReader(doc.toString()); Упаковщик GenericPackager = новый GenericPackager (читатель); - person jdweng; 07.11.2017
comment
Собственно на Java InputStream is = getClass().getResourceAsStream("/fields.xml"); сделано так, не могу найти как конвертировать в C# - person chatay; 07.11.2017
comment
Прочитайте его в MemoryStream. Потоку памяти нужен byte[], поэтому используйте MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(doc.ToString())); поток.Позиция = 0; Упаковщик GenericPackager = новый GenericPackager (поток); - person jdweng; 07.11.2017
comment
Я даже пробовал MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes("deneme.xml")); StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd();, но получаю это исключение An unhandled exception of type 'org.jpos.iso.ISOException' occurred in jpos.dll Additional information: Error reading deneme.xml - person chatay; 07.11.2017
comment
использование Encoding.UTF8.GetBytes(deneme.xml) просто преобразует строку deneme.xml в байты. Игнорируйте любые ошибки, используя этот код. Можете ли вы протестировать код, используя мой xml вместо вашего. Прямо сейчас я подозреваю, что xml, который вы передаете упаковщику, плохой. - person jdweng; 07.11.2017