Skip to content

Commit a449ca4

Browse files
author
Will Sobel
committed
Fixed problem reported by Robert Bolhouse when a namespace is not provided. Added test to validate.
1 parent 9d6dc25 commit a449ca4

File tree

5 files changed

+120
-2
lines changed

5 files changed

+120
-2
lines changed

agent/data_item.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,12 @@ class DataItem : public ChangeSignaler
155155

156156
/* Duplicate Checking */
157157
bool isDuplicate(const std::string &aValue) {
158-
if (aValue == mLastValue) return true;
158+
// Do not dupe check for time series.
159+
if (mRepresentation != VALUE)
160+
return false;
161+
else if (aValue == mLastValue)
162+
return true;
163+
159164
mLastValue = aValue;
160165
return false;
161166
}

agent/xml_parser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ Component * XmlParser::loadComponent(
394394
return new Device(attributes);
395395
default:
396396
string prefix;
397-
if (node->ns->prefix != 0 &&
397+
if (node->ns != NULL && node->ns->prefix != 0 &&
398398
strncmp((const char*) node->ns->href, "urn:mtconnect.org:MTConnectDevices",
399399
34) != 0) {
400400
prefix = (const char*) node->ns->prefix;

samples/NoNamespace.xml

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<MTConnectDevices>
2+
<Header creationTime="2010-03-04T18:44:40+00:00" sender="localhost" instanceId="1267728234" bufferSize="131072" version="1.1"/>
3+
<Devices>
4+
<Device id="dev" iso841Class="6" name="Fanuc-4Axis" sampleInterval="10" uuid="000">
5+
<Description manufacturer="Fanuc"/>
6+
<DataItems>
7+
<DataItem category="EVENT" id="avail" type="AVAILABILITY"/>
8+
</DataItems>
9+
<Components>
10+
<Axes id="ax" name="Axes">
11+
<DataItems>
12+
<DataItem category="CONDITION" id="servo" type="ACTUATOR" />
13+
</DataItems>
14+
<Components>
15+
<Rotary id="c1" name="C" nativeName="S1">
16+
<DataItems>
17+
<DataItem category="SAMPLE" id="c2" name="S1speed" nativeUnits="REVOLUTION/MINUTE" subType="ACTUAL" type="SPINDLE_SPEED" units="REVOLUTION/MINUTE"/>
18+
<DataItem category="SAMPLE" id="c4" name="S1load" nativeUnits="PERCENT" subType="ACTUAL" type="LOAD" units="PERCENT"/>
19+
<DataItem category="SAMPLE" id="c3" name="SspeedOvr" nativeUnits="PERCENT" subType="OVERRIDE" type="SPINDLE_SPEED" units="PERCENT"/>
20+
<DataItem category="EVENT" id="cm" name="Cmode" type="ROTARY_MODE">
21+
<Constraints>
22+
<Value>SPINDLE</Value>
23+
</Constraints>
24+
</DataItem>
25+
<DataItem category="CONDITION" id="spindle" type="ACTUATOR"/>
26+
</DataItems>
27+
</Rotary>
28+
<Linear id="x1" name="X">
29+
<DataItems>
30+
<DataItem category="SAMPLE" id="x2" name="Xact" nativeUnits="MILLIMETER" subType="ACTUAL" type="POSITION" units="MILLIMETER"/>
31+
<DataItem category="SAMPLE" id="x4" name="Xcom" nativeUnits="MILLIMETER" subType="COMMANDED" type="POSITION" units="MILLIMETER"/>
32+
<DataItem category="SAMPLE" id="n3" name="Xload" nativeUnits="PERCENT" type="LOAD" units="PERCENT"/>
33+
<DataItem category="CONDITION" id="Xservo" type="ACTUATOR"/>
34+
<DataItem category="CONDITION" id="Xovertemp" type="TEMPERATURE"/>
35+
<DataItem category="CONDITION" id="Xtravel" type="POSITION"/>
36+
</DataItems>
37+
</Linear>
38+
<Linear id="y1" name="Y">
39+
<DataItems>
40+
<DataItem category="SAMPLE" id="y2" name="Yact" nativeUnits="MILLIMETER" subType="ACTUAL" type="POSITION" units="MILLIMETER"/>
41+
<DataItem category="SAMPLE" id="y4" name="Ycom" nativeUnits="MILLIMETER" subType="COMMANDED" type="POSITION" units="MILLIMETER"/>
42+
<DataItem category="SAMPLE" id="y3" name="Yload" nativeUnits="PERCENT" type="LOAD" units="PERCENT"/>
43+
<DataItem category="CONDITION" id="Yservo" type="ACTUATOR"/>
44+
<DataItem category="CONDITION" id="Yovertemp" type="TEMPERATURE"/>
45+
<DataItem category="CONDITION" id="Ytravel" type="POSITION"/>
46+
</DataItems>
47+
</Linear>
48+
<Linear id="z1" name="Z">
49+
<DataItems>
50+
<DataItem category="SAMPLE" id="z2" name="Zact" nativeUnits="MILLIMETER" subType="ACTUAL" type="POSITION" units="MILLIMETER"/>
51+
<DataItem category="SAMPLE" id="z4" name="Zcom" nativeUnits="MILLIMETER" subType="COMMANDED" type="POSITION" units="MILLIMETER"/>
52+
<DataItem category="SAMPLE" id="z3" name="Zload" nativeUnits="PERCENT" type="LOAD" units="PERCENT"/>
53+
<DataItem category="CONDITION" id="Zservo" type="ACTUATOR"/>
54+
<DataItem category="CONDITION" id="Zovertemp" type="TEMPERATURE"/>
55+
<DataItem category="CONDITION" id="Ztravel" type="POSITION"/>
56+
</DataItems>
57+
</Linear>
58+
<Rotary id="a1" name="A">
59+
<DataItems>
60+
<DataItem category="SAMPLE" id="a2" name="Aact" nativeUnits="MILLIMETER" subType="ACTUAL" type="ANGLE" units="MILLIMETER"/>
61+
<DataItem category="SAMPLE" id="a4" name="Acom" nativeUnits="MILLIMETER" subType="COMMANDED" type="POSITION" units="MILLIMETER"/>
62+
<DataItem category="SAMPLE" id="a3" name="Aload" nativeUnits="PERCENT" type="LOAD" units="PERCENT"/>
63+
<DataItem category="CONDITION" id="Aservo" type="ACTUATOR"/>
64+
<DataItem category="CONDITION" id="Aovertemp" type="TEMPERATURE"/>
65+
<DataItem category="CONDITION" id="Atravel" type="POSITION"/>
66+
<DataItem category="EVENT" id="am" name="Amode" type="ROTARY_MODE">
67+
<Constraints>
68+
<Value>INDEX</Value>
69+
</Constraints>
70+
</DataItem>
71+
</DataItems>
72+
</Rotary>
73+
</Components>
74+
</Axes>
75+
<Controller id="cn1" name="controller">
76+
<DataItems>
77+
<DataItem category="EVENT" id="message" type="MESSAGE"/>
78+
<DataItem category="EVENT" id="estop" type="EMERGENCY_STOP"/>
79+
<DataItem category="CONDITION" id="logic" type="LOGIC_PROGRAM"/>
80+
<DataItem category="CONDITION" id="comms" type="COMMUNICATIONS"/>
81+
<DataItem category="CONDITION" id="motion" type="MOTION_PROGRAM"/>
82+
<DataItem category="CONDITION" id="system" type="SYSTEM"/>
83+
</DataItems>
84+
<Components>
85+
<Path id="pth" name="path">
86+
<DataItems>
87+
<DataItem category="EVENT" id="cn2" name="block" type="BLOCK"/>
88+
<DataItem category="EVENT" id="cn3" name="mode" type="CONTROLLER_MODE"/>
89+
<DataItem category="EVENT" id="cn4" name="line" type="LINE"/>
90+
<DataItem category="EVENT" id="cn5" name="program" type="PROGRAM"/>
91+
<DataItem category="EVENT" id="cn6" name="execution" type="EXECUTION"/>
92+
<DataItem category="EVENT" id="part" name="part" type="PART_ID"/>
93+
<DataItem category="SAMPLE" id="path_pos" nativeUnits="MILLIMETER_3D" subType="ACTUAL" type="PATH_POSITION" units="MILLIMETER_3D"/>
94+
<DataItem category="SAMPLE" id="probe" nativeUnits="MILLIMETER_3D" subType="PROBE" type="PATH_POSITION" units="MILLIMETER_3D"/>
95+
<DataItem category="SAMPLE" id="path_feedrate" nativeUnits="MILLIMETER/SECOND" type="PATH_FEEDRATE" units="MILLIMETER/SECOND"/>
96+
<DataItem category="SAMPLE" id="Fovr" nativeUnits="PERCENT" type="PATH_FEEDRATE" units="PERCENT"/>
97+
98+
</DataItems>
99+
</Path>
100+
</Components>
101+
</Controller>
102+
</Components>
103+
</Device>
104+
</Devices>
105+
</MTConnectDevices>

test/xml_parser_test.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,9 @@ void XmlParserTest::testUpdateAsset()
323323
item = tool->mItems[0];
324324
CPPUNIT_ASSERT_EQUAL((string) "14.7", item->mMeasurements["CuttingEdgeLength"]->mValue);
325325
}
326+
327+
void XmlParserTest::testNoNamespace()
328+
{
329+
a = new XmlParser();
330+
CPPUNIT_ASSERT_NO_THROW(a->parseFile("../samples/NoNamespace.xml"));
331+
}

test/xml_parser_test.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class XmlParserTest : public CppUnit::TestFixture
5555
CPPUNIT_TEST(testConfiguration);
5656
CPPUNIT_TEST(testParseAsset);
5757
CPPUNIT_TEST(testUpdateAsset);
58+
CPPUNIT_TEST(testNoNamespace);
5859
CPPUNIT_TEST_SUITE_END();
5960

6061
protected:
@@ -72,6 +73,7 @@ class XmlParserTest : public CppUnit::TestFixture
7273
void testConfiguration();
7374
void testParseAsset();
7475
void testUpdateAsset();
76+
void testNoNamespace();
7577

7678
public:
7779
void setUp();

0 commit comments

Comments
 (0)