第二章 EXI协议原理与实现--7.8 测试ISO15118-20命令

7 Efficient XML编解码库 

7.8 测试ISO15118-20命令编解码

现在开始使用Efficient XML的库测试 ISO15118-20命令的编解码是否正确,是否与EXICodec.jar的结果一致。

在本书的附录B中罗列了ISO15118-20的所有命令(json、xml、exi),感兴趣的读者可以使用这些命令自己进行编解码验证。

编写测试程序mytest20-all.c,对15118-2命令的原始xml文件编码得到exi文件,然后对exi文件进行解码生成xml文件。检查二者是否内容一致。

#include 
#include 

// This is the header file that defines the transcoding methods.
// It supersedes the use of libxml2-efx.h used in previous releases.
#include 

// Implementation of a FNUserFill function to read bytes from a file
size_t FileFill(BYTE *buffer, int cnt, void *pvUserData)
{
    // read cnt bytes from the FILE pointer in pvUserData.
    // The FILE pointer was set in the call to EFXReaderInit()
    return(fread(buffer, 1, cnt, (FILE *) pvUserData));
}

// FNUserFlush function to write the encoded data to a file
size_t FileFlush(BYTE *buffer, int cnt, void *pvUserData)
{
    // write to the FILE pointer in pvUserData. This was set on EFXWriterInit() below
    return(fwrite(buffer, 1, cnt, (FILE *) pvUserData));
}

static char defaultErrorMessage[32];
#define ERR_REPORT(err) printf("Error detected: %s\n", EFXLookupEFXERR(err, defaultErrorMessage));
#define ERRCHK(x) do{ if ((err=(x))) { ERR_REPORT(err) return(1); } } while(0)

static const char *cxsFileName = "../schema/iso15118_20.cxs";

//--------------------------SessionSetupReq + SessionSetupRes ------------------
static char * const xmlFileName_SessionSetupReq = "15118-20/SessionSetupReq.xml";
static char * const encodedFileName_SessionSetupReq = "15118-20/SessionSetupReq.xml.exi";
static char * const decodedFileName_SessionSetupReq = "15118-20/SessionSetupReq-exi-out.xml";


static char * const xmlFileName_SessionSetupRes = "15118-20/SessionSetupRes.xml";
static char * const encodedFileName_SessionSetupRes = "15118-20/SessionSetupRes.xml.exi";
static char * const decodedFileName_SessionSetupRes = "15118-20/SessionSetupRes-exi-out.xml";

//--------------------------AuthorizationSetupReq + AuthorizationSetupRes ------------------
static char * const xmlFileName_AuthorizationSetupReq = "15118-20/AuthorizationSetupReq.xml";
static char * const encodedFileName_AuthorizationSetupReq = "15118-20/AuthorizationSetupReq.xml.exi";
static char * const decodedFileName_AuthorizationSetupReq = "15118-20/AuthorizationSetupReq-exi-out.xml";

static char * const xmlFileName_AuthorizationSetupRes = "15118-20/AuthorizationSetupRes.xml";
static char * const encodedFileName_AuthorizationSetupRes = "15118-20/AuthorizationSetupRes.xml.exi";
static char * const decodedFileName_AuthorizationSetupRes = "15118-20/AuthorizationSetupRes-exi-out.xml";

//--------------------------CertificateInstallationReq + CertificateInstallationRes ------------------
static char * const xmlFileName_CertificateInstallationReq = "15118-20/CertificateInstallationReq.xml";
static char * const encodedFileName_CertificateInstallationReq = "15118-20/CertificateInstallationReq.xml.exi";
static char * const decodedFileName_CertificateInstallationReq = "15118-20/CertificateInstallationReq-exi-out.xml";

static char * const xmlFileName_CertificateInstallationRes = "15118-20/CertificateInstallationRes.xml";
static char * const encodedFileName_CertificateInstallationRes = "15118-20/CertificateInstallationRes.xml.exi";
static char * const decodedFileName_CertificateInstallationRes = "15118-20/CertificateInstallationRes-exi-out.xml";

//--------------------------AuthorizationReq + AuthorizationRes ------------------
static char * const xmlFileName_AuthorizationReq = "15118-20/AuthorizationReq.xml";
static char * const encodedFileName_AuthorizationReq = "15118-20/AuthorizationReq.xml.exi";
static char * const decodedFileName_AuthorizationReq = "15118-20/AuthorizationReq-exi-out.xml";


static char * const xmlFileName_AuthorizationRes = "15118-20/AuthorizationRes.xml";
static char * const encodedFileName_AuthorizationRes = "15118-20/AuthorizationRes.xml.exi";
static char * const decodedFileName_AuthorizationRes = "15118-20/AuthorizationRes-exi-out.xml";

//--------------------------ServiceDiscoveryReq + ServiceDiscoveryRes ------------------
static char * const xmlFileName_ServiceDiscoveryReq = "15118-20/ServiceDiscoveryReq.xml";
static char * const encodedFileName_ServiceDiscoveryReq = "15118-20/ServiceDiscoveryReq.xml.exi";
static char * const decodedFileName_ServiceDiscoveryReq = "15118-20/ServiceDiscoveryReq-exi-out.xml";

static char * const xmlFileName_ServiceDiscoveryRes = "15118-20/ServiceDiscoveryRes.xml";
static char * const encodedFileName_ServiceDiscoveryRes = "15118-20/ServiceDiscoveryRes.xml.exi";
static char * const decodedFileName_ServiceDiscoveryRes = "15118-20/ServiceDiscoveryRes-exi-out.xml";

//--------------------------ServiceDetailReq + ServiceDetailRes ------------------
static char * const xmlFileName_ServiceDetailReq = "15118-20/ServiceDetailReq.xml";
static char * const encodedFileName_ServiceDetailReq = "15118-20/ServiceDetailReq.xml.exi";
static char * const decodedFileName_ServiceDetailReq = "15118-20/ServiceDetailReq-exi-out.xml";

static char * const xmlFileName_ServiceDetailRes = "15118-20/ServiceDetailRes.xml";
static char * const encodedFileName_ServiceDetailRes = "15118-20/ServiceDetailRes.xml.exi";
static char * const decodedFileName_ServiceDetailRes = "15118-20/ServiceDetailRes-exi-out.xml";

//--------------------------ServiceSelectionReq + ServiceSelectionRes ------------------
static char * const xmlFileName_ServiceSelectionReq = "15118-20/ServiceSelectionReq.xml";
static char * const encodedFileName_ServiceSelectionReq = "15118-20/ServiceSelectionReq.xml.exi";
static char * const decodedFileName_ServiceSelectionReq = "15118-20/ServiceSelectionReq-exi-out.xml";

static char * const xmlFileName_ServiceSelectionRes = "15118-20/ServiceSelectionRes.xml";
static char * const encodedFileName_ServiceSelectionRes = "15118-20/ServiceSelectionRes.xml.exi";
static char * const decodedFileName_ServiceSelectionRes = "15118-20/ServiceSelectionRes-exi-out.xml";

//--------------------------DC_ChargeParameterDiscoveryReq + DC_ChargeParameterDiscoveryRes ------------------
static char * const xmlFileName_DC_ChargeParameterDiscoveryReq = "15118-20/DC_ChargeParameterDiscoveryReq.xml";
static char * const encodedFileName_DC_ChargeParameterDiscoveryReq = "15118-20/DC_ChargeParameterDiscoveryReq.xml.exi";
static char * const decodedFileName_DC_ChargeParameterDiscoveryReq = "15118-20/DC_ChargeParameterDiscoveryReq-exi-out.xml";

static char * const xmlFileName_DC_ChargeParameterDiscoveryRes = "15118-20/DC_ChargeParameterDiscoveryRes.xml";
static char * const encodedFileName_DC_ChargeParameterDiscoveryRes = "15118-20/DC_ChargeParameterDiscoveryRes.xml.exi";
static char * const decodedFileName_DC_ChargeParameterDiscoveryRes = "15118-20/DC_ChargeParameterDiscoveryRes-exi-out.xml";

//--------------------------ScheduleExchangeReq + ScheduleExchangeRes ------------------
static char * const xmlFileName_ScheduleExchangeReq = "15118-20/ScheduleExchangeReq.xml";
static char * const encodedFileName_ScheduleExchangeReq = "15118-20/ScheduleExchangeReq.xml.exi";
static char * const decodedFileName_ScheduleExchangeReq = "15118-20/ScheduleExchangeReq-exi-out.xml";

static char * const xmlFileName_ScheduleExchangeRes = "15118-20/ScheduleExchangeRes.xml";
static char * const encodedFileName_ScheduleExchangeRes = "15118-20/ScheduleExchangeRes.xml.exi";
static char * const decodedFileName_ScheduleExchangeRes = "15118-20/ScheduleExchangeRes-exi-out.xml";

//--------------------------PowerDeliveryReq + PowerDeliveryRes ------------------
static char * const xmlFileName_PowerDeliveryReq = "15118-20/PowerDeliveryReq.xml";
static char * const encodedFileName_PowerDeliveryReq = "15118-20/PowerDeliveryReq.xml.exi";
static char * const decodedFileName_PowerDeliveryReq = "15118-20/PowerDeliveryReq-exi-out.xml";

static char * const xmlFileName_PowerDeliveryRes = "15118-20/PowerDeliveryRes.xml";
static char * const encodedFileName_PowerDeliveryRes = "15118-20/PowerDeliveryRes.xml.exi";
static char * const decodedFileName_PowerDeliveryRes = "15118-20/PowerDeliveryRes-exi-out.xml";

//--------------------------AC_ChargeLoopReq + AC_ChargeLoopRes ------------------
static char * const xmlFileName_AC_ChargeLoopReq = "15118-20/AC_ChargeLoopReq.xml";
static char * const encodedFileName_AC_ChargeLoopReq = "15118-20/AC_ChargeLoopReq.xml.exi";
static char * const decodedFileName_AC_ChargeLoopReq = "15118-20/AC_ChargeLoopReq-exi-out.xml";

static char * const xmlFileName_AC_ChargeLoopRes = "15118-20/AC_ChargeLoopRes.xml";
static char * const encodedFileName_AC_ChargeLoopRes = "15118-20/AC_ChargeLoopRes.xml.exi";
static char * const decodedFileName_AC_ChargeLoopRes = "15118-20/AC_ChargeLoopRes-exi-out.xml";

//--------------------------SessionStopReq + SessionStopRes ------------------
static char * const xmlFileName_SessionStopReq = "15118-20/SessionStopReq.xml";
static char * const encodedFileName_SessionStopReq = "15118-20/SessionStopReq.xml.exi";
static char * const decodedFileName_SessionStopReq = "15118-20/SessionStopReq-exi-out.xml";


static char * const xmlFileName_SessionStopRes= "15118-20/SessionStopRes.xml";
static char * const encodedFileName_SessionStopRes = "15118-20/SessionStopRes.xml.exi";
static char * const decodedFileName_SessionStopRes = "15118-20/SessionStopRes-exi-out.xml";

static  char* xmlFileName[][2] = {
        {xmlFileName_SessionSetupReq, xmlFileName_SessionSetupRes},
        {xmlFileName_AuthorizationSetupReq, xmlFileName_AuthorizationSetupRes},
        {xmlFileName_CertificateInstallationReq, xmlFileName_CertificateInstallationRes},
        {xmlFileName_AuthorizationReq, xmlFileName_AuthorizationRes},
        {xmlFileName_ServiceDiscoveryReq, xmlFileName_ServiceDiscoveryRes},
        {xmlFileName_ServiceDetailReq, xmlFileName_ServiceDetailRes},
        {xmlFileName_ServiceSelectionReq, xmlFileName_ServiceSelectionRes},
        {xmlFileName_DC_ChargeParameterDiscoveryReq, xmlFileName_DC_ChargeParameterDiscoveryRes},
        {xmlFileName_ScheduleExchangeReq, xmlFileName_ScheduleExchangeRes},
        {xmlFileName_PowerDeliveryReq, xmlFileName_PowerDeliveryRes},
        {xmlFileName_AC_ChargeLoopReq,xmlFileName_AC_ChargeLoopRes},
        {xmlFileName_SessionStopReq,xmlFileName_SessionStopRes}
};

static  char* encodedFileName[][2] = {
        {encodedFileName_SessionSetupReq, encodedFileName_SessionSetupRes},
        {encodedFileName_AuthorizationSetupReq, encodedFileName_AuthorizationSetupRes},
        {encodedFileName_CertificateInstallationReq, encodedFileName_CertificateInstallationRes},
        {encodedFileName_AuthorizationReq, encodedFileName_AuthorizationRes},
        {encodedFileName_ServiceDiscoveryReq, encodedFileName_ServiceDiscoveryRes},
        {encodedFileName_ServiceDetailReq, encodedFileName_ServiceDetailRes},
        {encodedFileName_ServiceSelectionReq, encodedFileName_ServiceSelectionRes},
        {encodedFileName_DC_ChargeParameterDiscoveryReq, encodedFileName_DC_ChargeParameterDiscoveryRes},
        {encodedFileName_ScheduleExchangeReq, encodedFileName_ScheduleExchangeRes},
        {encodedFileName_PowerDeliveryReq, encodedFileName_PowerDeliveryRes},
        {encodedFileName_AC_ChargeLoopReq, encodedFileName_AC_ChargeLoopRes},
        {encodedFileName_SessionStopReq, encodedFileName_SessionStopRes}
};

static  char* decodedFileName[][2] = {
        {decodedFileName_SessionSetupReq, decodedFileName_SessionSetupRes},
        {decodedFileName_AuthorizationSetupReq, decodedFileName_AuthorizationSetupRes},
        {decodedFileName_CertificateInstallationReq, decodedFileName_CertificateInstallationRes},
        {decodedFileName_AuthorizationReq, decodedFileName_AuthorizationRes},
        {decodedFileName_ServiceDiscoveryReq, decodedFileName_ServiceDiscoveryRes},
        {decodedFileName_ServiceDetailReq, decodedFileName_ServiceDetailRes},
        {decodedFileName_ServiceSelectionReq, decodedFileName_ServiceSelectionRes},
        {decodedFileName_DC_ChargeParameterDiscoveryReq, decodedFileName_DC_ChargeParameterDiscoveryRes},
        {decodedFileName_ScheduleExchangeReq, decodedFileName_ScheduleExchangeRes},
        {decodedFileName_PowerDeliveryReq, decodedFileName_PowerDeliveryRes},
        {decodedFileName_AC_ChargeLoopReq, decodedFileName_AC_ChargeLoopRes},
        {decodedFileName_SessionStopReq, decodedFileName_SessionStopRes}
};

int main(int argc, char** args){
    char buf[80];
    getcwd(buf, sizeof(buf));
    printf("current working directory: %s\n", buf);
    FILE *out1,*out2;
    int exiDatalength;

    int err;
    EFXFactory * pFactory;
    FILE *in, *out;

    // this structure contains error information if parsing the XML input fails
    EFXXMLParseError pError;

    // allocate a new factory
    ERRCHK(EFXFactoryAlloc(&pFactory));
    // set the schema used to encode the data
    ERRCHK(EFXFactorySetSchema(pFactory, 0, 0, cxsFileName));
    // set properties to be same as in the settings file
    EFXFactorySetProperty(pFactory, EFXPROPERTY_COMPRESSION, 0);  // turning off compression makes output bit-aligned

    int row = sizeof(xmlFileName)/sizeof(xmlFileName[0]);
    int col = sizeof(xmlFileName[0])/sizeof(xmlFileName[0][0]);
    printf("row=%d, col=%d \n", row, col);
    printf(" sizeof(xmlFileName) = %d \n", sizeof(xmlFileName));
    printf(" sizeof(xmlFileName[0]) = %d \n", sizeof(xmlFileName[0]));
    printf(" sizeof(xmlFileName[0][0]) = %d \n", sizeof(xmlFileName[0][0]));
    printf("xmlFileName[0] = %s, %s \n", xmlFileName[0][0], xmlFileName[0][1]);

    //--------------------------SessionSetupReq + SessionSetupRes ------------------
    for(int i=0; iEXI
         in  = fopen(xmlFileName[i][0], "r");
         out = fopen(encodedFileName[i][0], "wb");
         // convert the EXI encoded data into XML
         ERRCHK(EFXTranscoderEncode(pFactory, FileFill, in, xmlFileName[i][0], FileFlush, out, &pError));
         fclose(in);
         fclose(out);
         printf("fwrite %s ------ OK!\n",encodedFileName[i][0]);

        // Req decode: EXI-> xml
        printf("encodedFileName= %s \n",encodedFileName[i][0]);
        printf("decodedFileName= %s \n",decodedFileName[i][0]);
        in  = fopen(encodedFileName[i][0], "rb");
        out = fopen(decodedFileName[i][0], "w");
        ERRCHK(EFXTranscoderDecode(pFactory, FileFill, in, FileFlush, out));
        fclose(in);
        fclose(out);
        printf("fwrite %s ------ OK!\n",decodedFileName[i][0]);

        //Res encode:  xml->EXI ------------------------------------
         in = fopen(xmlFileName[i][1], "r");
         out = fopen(encodedFileName[i][1], "wb");
         // convert the EXI encoded data into XML
         ERRCHK(EFXTranscoderEncode(pFactory, FileFill, in, xmlFileName[i][1], FileFlush, out, &pError));
         fclose(in);
         fclose(out);
         printf("fwrite %s ------ OK!\n",encodedFileName[i][1]);

        // Res decode: EXI->xml
        printf("encodedFileName= %s \n",encodedFileName[i][1]);
        printf("decodedFileName= %s \n",decodedFileName[i][1]);
        in = fopen(encodedFileName[i][1], "rb");
        out = fopen(decodedFileName[i][1], "w");
        ERRCHK(EFXTranscoderDecode(pFactory, FileFill, in, FileFlush, out));
        fclose(in);
        fclose(out);
        printf("fwrite %s ------ OK!\n",decodedFileName[i][1]);

    }

    // Free memory associated with the factory
    ERRCHK(EFXFactoryFree(pFactory));

}

运行后输出文件关系如下:

AuthorizationReq.xml: 原始xml文件

AuthorizationReq.exi: 原始的exi文件,这是用EXICodec.jar编码的结果

使用Efficient XML库对原始xml文件进行编解码:

AuthorizationReq.xml.exi:  经过Efficient XML编码生成的exi文件

AuthorizationReq-exi-out.xml: 对AuthorizationReq.xml.exi文件解码,重新生成的xml文件

另外作为对比,使用OpenEXI..jar工具同样对原始xml文件进行编解码,生成文件:

AuthorizationReq_encode.exi:  使用OpenEXI.jar编码生成的exi文件

AuthorizationReq_decode.xml:  使用OpenEXI.jar编码对原始xml解码,重新生成的xml文件

AuthorizationReq.xml_decode.xml: 使用使用OpenEXI.jar对AuthorizationReq.xml.exi解码,重新生成的额xml文件。

输出目录文件列表如下图:

第二章 EXI协议原理与实现--7.8 测试ISO15118-20命令_第1张图片

编解码文件对比结果:  

  • OpenEXI.jar和Efficient XML编码结果完全相同。

  • 总共26条命令, 完全与EXICodec.jar编码结果相同的有22条命令,4条命令不相同。

详细结果如下:

XML文件

EXICodec.jar的编码EXI

OpenEXI编码结果EXI

Efficient XML编码结果EXI

supportedAppProtocolReq

71字节

71字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

71字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi  OK

解码Efficient XML的exi OK

supportedAppProtocolRes

4字节

4字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

4字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi  OK

解码Efficient XML的exi OK

SessionSetupReq

71字节

32字节,与EXICodec.jar的exi不同

自编自解OK

解码EXICodec.jar的exi Failed

解码Efficient XML的exi  OK

32字节, 与OpenEXI编码相同

自编自解 OK

解码EXICodec.jar的exi Failed

解码OpenEXI.jar的exi  OK

SessionSetupRes

30字节

30字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  Failed

30字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

AuthorizationSetupReq

17字节

61字节,与EXICodec.jar的exi不同

自编自解OK

解码EXICodec.jar的exi Failed

解码Efficient XML的exi  OK

61字节,

自编自解 OK

解码EXICodec.jar的exi Failed

解码OpenEXI.jar的exi  OK

AuthorizationSetupRes

38字节

38字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

38字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

CertificateInstallationReq

1907字节

1799字节,与EXICodec.jar的exi不同

自编自解OK

解码EXICodec.jar的exi Failed

解码Efficient XML的exi  OK

1799字节,

自编自解 OK

解码EXICodec.jar的exi Failed

解码OpenEXI.jar的exi  OK

CertificateInstallationRes

100字节

100字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

100字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

AuthorizationReq

1870字节

1762字节,与EXICodec.jar的exi不同

自编自解OK

解码EXICodec.jar的exi Failed

解码Efficient XML的exi  OK

1762字节,

自编自解 OK

解码EXICodec.jar的exi Failed

解码OpenEXI.jar的exi  OK

AuthorizationRes

19字节

19字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

19字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

ServiceDiscoveryReq

18字节

18字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

18字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

ServiceDiscoveryRes

22字节

22字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

22字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

ServiceDetailReq

19字节

19字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

19字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

ServiceDetailRes

79字节

79字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

79字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

ServiceSelectionReq

21字节

21字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

21字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

ServiceSelectionRes

19字节

19字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

19字节,

自编自解 OK

解码EXICodec.jar的exi OK

解码OpenEXI.jar的exi  OK

DC_ChargeParameterDiscoveryReq

40字节

40字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

40字节,与EXICodec.jar的exi相同

自编自解   OK

解码EXICodec.jar的exi  OK

解码OpenEXI.jar的exi   OK

DC_ChargeParameterDiscoveryRes

41字节

41字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

41字节,与EXICodec.jar的exi相同

自编自解   OK

解码EXICodec.jar的exi   OK

解码OpenEXI.jar的exi    OK

ScheduleExchangeReq

44字节

44字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

44字节,

自编自解   OK

解码EXICodec.jar的exi   OK

解码OpenEXI.jar的exi    OK

ScheduleExchangeRes

20字节

20字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

20字节,

自编自解   OK

解码EXICodec.jar的exi   OK

解码OpenEXI.jar的exi    OK

PowerDeliveryReq

19字节

19字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

19字节,

自编自解   OK

解码EXICodec.jar的exi   OK

解码OpenEXI.jar的exi    OK

PowerDeliveryRes

19字节

19字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

19字节,

自编自解   OK

解码EXICodec.jar的exi   OK

解码OpenEXI.jar的exi    OK

AC_ChargeLoopReq

V2G_CI_AC.xsd

50字节

50字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

50字节,与EXICodec.jar的exi相同

自编自解   OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

AC_ChargeLoopRes

30字节

30字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

30字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

SessionStopReq

18字节

18字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

18字节,

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

SessionStopRes

19字节

19字节,与EXICodec.jar的exi相同

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

19字节,

自编自解OK

解码EXICodec.jar的exi   OK

解码Efficient XML的exi  OK

后面将分析命令编码不同的详细原因。

你可能感兴趣的:(ISO15118,EXI)