summaryrefslogtreecommitdiff
path: root/CIAO/tests/IDL3_to_XMI/IDL2XMI_Test/XML_Helper.cpp
blob: 000b63867ca33484b46a2f6a043c2b64160c5298 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "XML_Helper.h"
#include "ace/Log_Msg.h"

#include "xercesc/dom/DOM.hpp"
#include "xercesc/parsers/XercesDOMParser.hpp"

#include "ace/XML_Utils/XercesString.h"

namespace Test
{
  Helper::Helper (XML::XML_Error_Handler &eh)
    : impl_ (0)
    , parser_ (0)
    , e_handler_ (eh)
  {
    this->init_parser ();
  }

  Helper::~Helper (void)
  {
    this->terminate_parser ();
  }

  void
  Helper::init_parser (void)
  {
    // Initialize the Xerces run-time
    XERCES_CPP_NAMESPACE::XMLPlatformUtils::Initialize();

    // Instantiate the DOM parser.
    static const XMLCh gLS[] = { XERCES_CPP_NAMESPACE::chLatin_L,
                                  XERCES_CPP_NAMESPACE::chLatin_S,
                                  XERCES_CPP_NAMESPACE::chNull };

    // Get an implementation of the Load-Store (LS) interface
    // and cache it for later use
    impl_ =
      XERCES_CPP_NAMESPACE::DOMImplementationRegistry::getDOMImplementation(gLS);
  }

  int
  Helper::validate_dom (const ACE_TCHAR *url)
  {
    if (url == 0)
      return 0;

    try
      {
        if (this->parser_ == 0)
          this->parser_ = new XERCES_CPP_NAMESPACE::XercesDOMParser ();

        // Discard comment nodes in the document
        this->parser_->setCreateCommentNodes (false);

        // Do not create EntityReference nodes in the DOM tree. No
        // EntityReference nodes will be created, only the nodes
        // corresponding to their fully expanded sustitution text will be
        // created.
        this->parser_->setCreateEntityReferenceNodes (false);

        // Perform Validation
        this->parser_->setValidationScheme (
          XERCES_CPP_NAMESPACE::AbstractDOMParser::Val_Always);

        // Do not include ignorable whitespace in the DOM tree.
        this->parser_->setIncludeIgnorableWhitespace (false);

        // Enable full schema constraint checking, including checking which
        // may be time-consuming or memory intensive. Currently, particle
        // unique attribution constraint checking and particle derivation
        // restriction checking are controlled by this option.
        this->parser_->setValidationSchemaFullChecking (true);

        this->parser_->setErrorHandler (&e_handler_);

        this->parser_->parse (ACE_TEXT_ALWAYS_CHAR (url));

        if (e_handler_.getErrors ())
          return 1;

        return 0;
      }
    catch (...)
      {
        ACE_DEBUG ((LM_DEBUG,
                    "(%P|%t) Caught an unknown exception\n"));
        throw;
      }

    return 0;
  }

  void
  Helper::terminate_parser (void)
  {
    XERCES_CPP_NAMESPACE::XMLPlatformUtils::Terminate ();
  }
}