Skip to content

Commit 17c102c

Browse files
committed
Upgrade to Maven 4.0.0-rc-5 and migrate to public API
- Replace XmlNodeBuilder (internal API) with XmlService (public API) for trim=true cases - Keep XmlNodeBuilder only for trim=false to preserve backwards compatibility - Add XmlPullParserToXMLStreamReaderAdapter to bridge XmlPullParser and XMLStreamReader - Update InputLocationBuilder interface to use XMLStreamReader instead of XmlPullParser - Remove deprecated 'detail' field and getDetail() method from XmlPullParserException - Update tests to match new InputLocationBuilder signature All 217 tests pass successfully.
1 parent a51782f commit 17c102c

File tree

5 files changed

+406
-27
lines changed

5 files changed

+406
-27
lines changed
Lines changed: 349 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,349 @@
1+
package org.codehaus.plexus.util.xml;
2+
3+
/*
4+
* Copyright The Codehaus Foundation.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
import javax.xml.namespace.NamespaceContext;
20+
import javax.xml.namespace.QName;
21+
import javax.xml.stream.Location;
22+
import javax.xml.stream.XMLStreamException;
23+
import javax.xml.stream.XMLStreamReader;
24+
25+
import org.codehaus.plexus.util.xml.pull.XmlPullParser;
26+
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
27+
28+
/**
29+
* Adapter that wraps an XmlPullParser and implements the XMLStreamReader interface.
30+
* This allows using XmlPullParser with APIs that expect XMLStreamReader.
31+
*/
32+
class XmlPullParserToXMLStreamReaderAdapter implements XMLStreamReader {
33+
private final XmlPullParser parser;
34+
private int eventType;
35+
36+
XmlPullParserToXMLStreamReaderAdapter(XmlPullParser parser) throws XMLStreamException {
37+
this.parser = parser;
38+
try {
39+
this.eventType = parser.getEventType();
40+
} catch (XmlPullParserException e) {
41+
throw new XMLStreamException(e);
42+
}
43+
}
44+
45+
@Override
46+
public int next() throws XMLStreamException {
47+
try {
48+
eventType = parser.next();
49+
return convertEventType(eventType);
50+
} catch (Exception e) {
51+
throw new XMLStreamException(e);
52+
}
53+
}
54+
55+
@Override
56+
public boolean hasNext() throws XMLStreamException {
57+
return eventType != XmlPullParser.END_DOCUMENT;
58+
}
59+
60+
@Override
61+
public int getEventType() {
62+
return convertEventType(eventType);
63+
}
64+
65+
@Override
66+
public String getElementText() throws XMLStreamException {
67+
try {
68+
return parser.nextText();
69+
} catch (Exception e) {
70+
throw new XMLStreamException(e);
71+
}
72+
}
73+
74+
@Override
75+
public String getLocalName() {
76+
return parser.getName();
77+
}
78+
79+
@Override
80+
public String getNamespaceURI() {
81+
return parser.getNamespace();
82+
}
83+
84+
@Override
85+
public String getPrefix() {
86+
return parser.getPrefix();
87+
}
88+
89+
@Override
90+
public String getAttributeValue(String namespaceURI, String localName) {
91+
return parser.getAttributeValue(namespaceURI, localName);
92+
}
93+
94+
@Override
95+
public int getAttributeCount() {
96+
return parser.getAttributeCount();
97+
}
98+
99+
@Override
100+
public String getAttributeNamespace(int index) {
101+
return parser.getAttributeNamespace(index);
102+
}
103+
104+
@Override
105+
public String getAttributeLocalName(int index) {
106+
return parser.getAttributeName(index);
107+
}
108+
109+
@Override
110+
public String getAttributePrefix(int index) {
111+
return parser.getAttributePrefix(index);
112+
}
113+
114+
@Override
115+
public String getAttributeValue(int index) {
116+
return parser.getAttributeValue(index);
117+
}
118+
119+
@Override
120+
public String getText() {
121+
return parser.getText();
122+
}
123+
124+
@Override
125+
public Location getLocation() {
126+
return new Location() {
127+
@Override
128+
public int getLineNumber() {
129+
return parser.getLineNumber();
130+
}
131+
132+
@Override
133+
public int getColumnNumber() {
134+
return parser.getColumnNumber();
135+
}
136+
137+
@Override
138+
public int getCharacterOffset() {
139+
return -1;
140+
}
141+
142+
@Override
143+
public String getPublicId() {
144+
return null;
145+
}
146+
147+
@Override
148+
public String getSystemId() {
149+
return null;
150+
}
151+
};
152+
}
153+
154+
private int convertEventType(int pullEventType) {
155+
switch (pullEventType) {
156+
case XmlPullParser.START_DOCUMENT:
157+
return START_DOCUMENT;
158+
case XmlPullParser.END_DOCUMENT:
159+
return END_DOCUMENT;
160+
case XmlPullParser.START_TAG:
161+
return START_ELEMENT;
162+
case XmlPullParser.END_TAG:
163+
return END_ELEMENT;
164+
case XmlPullParser.TEXT:
165+
return CHARACTERS;
166+
case XmlPullParser.CDSECT:
167+
return CDATA;
168+
case XmlPullParser.ENTITY_REF:
169+
return ENTITY_REFERENCE;
170+
case XmlPullParser.IGNORABLE_WHITESPACE:
171+
return SPACE;
172+
case XmlPullParser.PROCESSING_INSTRUCTION:
173+
return PROCESSING_INSTRUCTION;
174+
case XmlPullParser.COMMENT:
175+
return COMMENT;
176+
case XmlPullParser.DOCDECL:
177+
return DTD;
178+
default:
179+
return 0;
180+
}
181+
}
182+
183+
// Unsupported methods that are not needed for basic XML reading
184+
@Override
185+
public QName getName() {
186+
return new QName(getNamespaceURI(), getLocalName(), getPrefix());
187+
}
188+
189+
@Override
190+
public boolean isStartElement() {
191+
return getEventType() == START_ELEMENT;
192+
}
193+
194+
@Override
195+
public boolean isEndElement() {
196+
return getEventType() == END_ELEMENT;
197+
}
198+
199+
@Override
200+
public boolean isCharacters() {
201+
return getEventType() == CHARACTERS;
202+
}
203+
204+
@Override
205+
public boolean isWhiteSpace() {
206+
return getEventType() == SPACE;
207+
}
208+
209+
@Override
210+
public boolean hasName() {
211+
return getEventType() == START_ELEMENT || getEventType() == END_ELEMENT;
212+
}
213+
214+
@Override
215+
public boolean hasText() {
216+
int type = getEventType();
217+
return type == CHARACTERS || type == CDATA || type == SPACE || type == ENTITY_REFERENCE;
218+
}
219+
220+
@Override
221+
public QName getAttributeName(int index) {
222+
return new QName(getAttributeNamespace(index), getAttributeLocalName(index), getAttributePrefix(index));
223+
}
224+
225+
@Override
226+
public String getAttributeType(int index) {
227+
return parser.getAttributeType(index);
228+
}
229+
230+
@Override
231+
public boolean isAttributeSpecified(int index) {
232+
return true;
233+
}
234+
235+
@Override
236+
public int getNamespaceCount() {
237+
return 0;
238+
}
239+
240+
@Override
241+
public String getNamespacePrefix(int index) {
242+
return null;
243+
}
244+
245+
@Override
246+
public String getNamespaceURI(int index) {
247+
return null;
248+
}
249+
250+
@Override
251+
public NamespaceContext getNamespaceContext() {
252+
return null;
253+
}
254+
255+
@Override
256+
public String getNamespaceURI(String prefix) {
257+
return null;
258+
}
259+
260+
@Override
261+
public int getTextLength() {
262+
return getText() != null ? getText().length() : 0;
263+
}
264+
265+
@Override
266+
public int getTextStart() {
267+
return 0;
268+
}
269+
270+
@Override
271+
public char[] getTextCharacters() {
272+
String text = getText();
273+
return text != null ? text.toCharArray() : new char[0];
274+
}
275+
276+
@Override
277+
public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) {
278+
char[] source = getTextCharacters();
279+
int copied = Math.min(length, source.length - sourceStart);
280+
System.arraycopy(source, sourceStart, target, targetStart, copied);
281+
return copied;
282+
}
283+
284+
@Override
285+
public String getEncoding() {
286+
return parser.getInputEncoding();
287+
}
288+
289+
@Override
290+
public String getCharacterEncodingScheme() {
291+
return null;
292+
}
293+
294+
@Override
295+
public String getVersion() {
296+
return null;
297+
}
298+
299+
@Override
300+
public boolean isStandalone() {
301+
return false;
302+
}
303+
304+
@Override
305+
public boolean standaloneSet() {
306+
return false;
307+
}
308+
309+
@Override
310+
public String getPITarget() {
311+
return null;
312+
}
313+
314+
@Override
315+
public String getPIData() {
316+
return null;
317+
}
318+
319+
@Override
320+
public Object getProperty(String name) {
321+
return null;
322+
}
323+
324+
@Override
325+
public void require(int type, String namespaceURI, String localName) throws XMLStreamException {
326+
// Not implemented
327+
}
328+
329+
@Override
330+
public void close() throws XMLStreamException {
331+
// Not implemented - XmlPullParser doesn't have close
332+
}
333+
334+
@Override
335+
public int nextTag() throws XMLStreamException {
336+
int eventType = next();
337+
while ((eventType == CHARACTERS && isWhiteSpace())
338+
|| (eventType == CDATA && isWhiteSpace())
339+
|| eventType == SPACE
340+
|| eventType == PROCESSING_INSTRUCTION
341+
|| eventType == COMMENT) {
342+
eventType = next();
343+
}
344+
if (eventType != START_ELEMENT && eventType != END_ELEMENT) {
345+
throw new XMLStreamException("expected start or end tag", getLocation());
346+
}
347+
return eventType;
348+
}
349+
}

0 commit comments

Comments
 (0)