1818 */
1919package org .apache .maven .impl ;
2020
21+ import javax .xml .stream .XMLStreamException ;
22+
23+ import java .io .IOException ;
2124import java .io .InputStream ;
2225import java .io .OutputStream ;
23- import java .io .Reader ;
24- import java .io .Writer ;
25- import java .net .URL ;
2626import java .nio .file .Files ;
27- import java .nio .file .Path ;
2827
2928import org .apache .maven .api .annotations .Nonnull ;
3029import org .apache .maven .api .di .Named ;
3837import org .apache .maven .plugin .descriptor .io .PluginDescriptorStaxReader ;
3938import org .apache .maven .plugin .descriptor .io .PluginDescriptorStaxWriter ;
4039
41- import static org .apache .maven .impl .ImplUtils .nonNull ;
4240import static org .apache .maven .impl .StaxLocation .getLocation ;
4341import static org .apache .maven .impl .StaxLocation .getMessage ;
4442
4543@ Named
4644@ Singleton
4745public class DefaultPluginXmlFactory implements PluginXmlFactory {
46+
47+ private static final PluginDescriptorStaxWriter WRITER = new PluginDescriptorStaxWriter ();
48+ private static final PluginDescriptorStaxReader READER = new PluginDescriptorStaxReader ();
49+
4850 @ Override
4951 public PluginDescriptor read (@ Nonnull XmlReaderRequest request ) throws XmlReaderException {
50- nonNull (request , "request" );
51- Path path = request .getPath ();
52- URL url = request .getURL ();
53- Reader reader = request .getReader ();
54- InputStream inputStream = request .getInputStream ();
55- if (path == null && url == null && reader == null && inputStream == null ) {
56- throw new IllegalArgumentException ("path, url, reader or inputStream must be non null" );
57- }
58- try {
59- PluginDescriptorStaxReader xml = new PluginDescriptorStaxReader ();
60- xml .setAddDefaultEntities (request .isAddDefaultEntities ());
61- if (inputStream != null ) {
62- return xml .read (inputStream , request .isStrict ());
63- } else if (reader != null ) {
64- return xml .read (reader , request .isStrict ());
65- } else if (path != null ) {
66- try (InputStream is = Files .newInputStream (path )) {
67- return xml .read (is , request .isStrict ());
68- }
69- } else {
70- try (InputStream is = url .openStream ()) {
71- return xml .read (is , request .isStrict ());
72- }
73- }
74- } catch (Exception e ) {
75- throw new XmlReaderException ("Unable to read plugin: " + getMessage (e ), getLocation (e ), e );
76- }
52+ READER .setAddDefaultEntities (request .isAddDefaultEntities ());
53+ return createReadDescriptor (validate (request ));
7754 }
7855
7956 @ Override
8057 public void write (XmlWriterRequest <PluginDescriptor > request ) throws XmlWriterException {
81- nonNull (request , "request" );
82- PluginDescriptor content = nonNull (request .getContent (), "content" );
83- Path path = request .getPath ();
84- OutputStream outputStream = request .getOutputStream ();
85- Writer writer = request .getWriter ();
86- if (writer == null && outputStream == null && path == null ) {
87- throw new IllegalArgumentException ("writer, outputStream or path must be non null" );
88- }
89- try {
90- if (writer != null ) {
91- new PluginDescriptorStaxWriter ().write (writer , content );
92- } else if (outputStream != null ) {
93- new PluginDescriptorStaxWriter ().write (outputStream , content );
94- } else {
95- try (OutputStream os = Files .newOutputStream (path )) {
96- new PluginDescriptorStaxWriter ().write (outputStream , content );
97- }
98- }
99- } catch (Exception e ) {
100- throw new XmlWriterException ("Unable to write plugin: " + getMessage (e ), getLocation (e ), e );
101- }
58+ createWriteDescriptor (validate (request ));
10259 }
10360
10461 /**
@@ -124,4 +81,58 @@ public static PluginDescriptor fromXml(@Nonnull String xml) throws XmlReaderExce
12481 public static String toXml (@ Nonnull PluginDescriptor content ) throws XmlWriterException {
12582 return new DefaultPluginXmlFactory ().toXmlString (content );
12683 }
84+
85+ private static PluginDescriptor createReadDescriptor (XmlReaderRequest request ) {
86+ try {
87+ if (request .getInputStream () != null ) {
88+ return READER .read (request .getInputStream (), request .isStrict ());
89+ } else if (request .getReader () != null ) {
90+ return READER .read (request .getReader (), request .isStrict ());
91+ } else if (request .getPath () != null ) {
92+ try (InputStream is = Files .newInputStream (request .getPath ())) {
93+ return READER .read (is , request .isStrict ());
94+ }
95+ }
96+ try (InputStream is = request .getURL ().openStream ()) {
97+ return READER .read (is , request .isStrict ());
98+ }
99+ } catch (IOException | XMLStreamException e ) {
100+ throw new XmlReaderException ("Unable to read plugin: " + getMessage (e ), getLocation (e ), e );
101+ }
102+ }
103+
104+ private static XmlReaderRequest validate (XmlReaderRequest request ) {
105+ if (request .getInputStream () == null
106+ && request .getReader () == null
107+ && request .getPath () == null
108+ && request .getURL () == null ) {
109+ throw new IllegalArgumentException ("writer, outputStream or path must be non null" );
110+ }
111+ return request ;
112+ }
113+
114+ private static void createWriteDescriptor (XmlWriterRequest <PluginDescriptor > request ) throws XmlWriterException {
115+ try {
116+ if (request .getWriter () != null ) {
117+ WRITER .write (request .getWriter (), request .getContent ());
118+ } else if (request .getOutputStream () != null ) {
119+ WRITER .write (request .getOutputStream (), request .getContent ());
120+ } else if (request .getPath () != null ) {
121+ try (OutputStream os = Files .newOutputStream (request .getPath ())) {
122+ WRITER .write (os , request .getContent ());
123+ }
124+ } else {
125+ throw new IllegalArgumentException ("writer, outputStream or path must be non null" );
126+ }
127+ } catch (XmlWriterException | XMLStreamException | IOException e ) {
128+ throw new XmlWriterException ("Unable to write plugin: " + getMessage (e ), getLocation (e ), e );
129+ }
130+ }
131+
132+ private static XmlWriterRequest <PluginDescriptor > validate (XmlWriterRequest <PluginDescriptor > request ) {
133+ if (request .getWriter () == null && request .getOutputStream () == null && request .getPath () == null ) {
134+ throw new IllegalArgumentException ("writer, outputStream or path must be non null" );
135+ }
136+ return request ;
137+ }
127138}
0 commit comments