Asn.1 средства разработки, CDR конвертировать в XML с использованием Java
Я пытаюсь декодировать файл CDR, чтобы преобразовать его в XML
Я установил Java компилятор на моем ПК. Я использовал эту ссылку http://www.asnlab.org/asndt/overview.html
Я попытался декодировать мой файл CDR, но он не работает должным образом.
Он показывает первые 19 записей правильно, а потом выдает ошибку, я попробовал 2 разных CDR файла. И оба они показывают только 19 записей.
1-й файл дает мне эту ошибку:
Запись 20 org.asnlab.asndt.runtime.error.AsnRuntimeException: Невозможно вызвать метод 'valueOf()' 794995 в org.asnlab.asndt.runtime.conv.ReflectionEnumeratedConverter.toObject(ed:40) в org.asnlab.as runtime.type.EnumeratedType.I(mc:126) в org.asnlab.asndt.runtime.type.ImplicitType.I(xc:152) в org.asnlab.asndt.runtime.type.SetType.I(gb:191) в org.asnlab.asndt.runtime.type.SetType.I(gb:158) в org.asnlab.asndt.runtime.type.ImplicitType.I(xc:152) в org.asnlab.asndt.runtime.type.ChoiceType.I(hc:183) в org.asnlab.asndt.runtime.type.SequenceType.I(xb:221) в org.asnlab.asndt.runtime.type.SequenceType.I(xb:46) в org.asnlab. asndt.runtime.type.ImplicitType.I (xc: 152) в org.asnlab.asndt.runtime.type.AsnType.I(bb:354) в org.asnlab.asndt.runtime.type.ByteBuffer.decode(fc:18) на org.asnlab.asndt.runtime.type.AsnType.decode(bb:338) на Test.main(Test.java:20)
И второй файл дает мне эту ошибку:
Запишите 20 org.asnlab.asndt.runtime.error.InvalidTagException 229505 в org.asnlab.asndt.runtime.type.AsnType.I(bb:369) в org.asnlab.asndt.runtime.type.ByteBuffer.decode (18) на org.asnlab.asndt.runtime.type.AsnType.decode(bb:338) на Test.main(Test.java:20)
Я не понимаю, это проблема с моим определением ASN.1 или нет?
2 ответа
Этот вопрос лучше всего задать продавцу инструмента ASN.1, который вы используете. Другая возможность состоит в том, чтобы попробовать другие инструменты ASN.1, такие как один из перечисленных на странице проекта МСЭ-T ASN.1 ( http://www.itu.int/ITU-T/asn1/links/index.htm). Существует также бесплатный онлайн-компилятор и кодер / декодер ASN.1, который вы можете попробовать по адресу http://asn1-playground.oss.com/. Этот бесплатный онлайн-инструмент может дать вам подробный анализ вашего CDR, чтобы дать вам представление о том, что не так.
Файл CDR не совсем в формате кодировки ASN.1, между записями есть пробелы (ASCII 32). Одним из обходных путей является обнаружение и фильтрация этих пробелов каждый раз, когда запись декодируется, как пример кода здесь:
byte [] content = FileUtils.readFileToByteArray (новый файл ("CDR1")); ByteBuffer buffer = (ByteBuffer) Buffer.wrap(content, EncodingRules.BASIC_ENCODING_RULES); CDMACallDataRecords records = new CDMACallDataRecords(); try { while (buffer.hasRemaining()) { CDMACallDataRecord ccdr = (CDMACallDataRecord) CDMACallDataRecord.TYPE.decode(buffer, CDMACallDataRecord.CONVERTER); records.records.add(CCDR); if (buffer.hasRemaining()) { byte b = buffer.getByte(); while (b == 32 && buffer.hasRemaining()) { b = buffer.getByte(); } if (b!= 32) { buffer.position(buffer.position() - 1); } } } } catch (Exception e) { e.printStackTrace(); System.out.println(buffer.remaining()); }
Эта ошибка не указана в кодировке ASN.1, поэтому она не связана с инструментами ASN.1.