1 /*
2 * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.xml.internal.ws.api.server;
27
28 import com.sun.xml.internal.stream.buffer.XMLStreamBuffer;
29 import com.sun.xml.internal.ws.server.ServerRtException;
30 import com.sun.xml.internal.ws.streaming.TidyXMLStreamReader;
31 import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory;
32
33 import javax.xml.stream.XMLInputFactory;
34 import javax.xml.stream.XMLStreamException;
35 import javax.xml.stream.XMLStreamReader;
36 import java.io.IOException;
37 import java.io.InputStream;
38 import java.net.MalformedURLException;
39 import java.net.URL;
40
41 /**
42 * SPI that provides the source of {@link SDDocument}.
43 *
44 * <p>
45 * This abstract class could be implemented by appliations, or one of the
46 * {@link #create} methods can be used.
47 *
48 * @author Kohsuke Kawaguchi
49 */
50 public abstract class SDDocumentSource {
51 /**
52 * Returns the {@link XMLStreamReader} that reads the document.
53 *
54 * <p>
55 * This method maybe invoked multiple times concurrently.
56 *
57 * @param xif
58 * The implementation may choose to use this object when it wants to
59 * create a new parser (or it can just ignore this parameter completely.)
60 * @return
61 * The caller is responsible for closing the reader to avoid resource leak.
62 *
63 * @throws XMLStreamException
64 * if something goes wrong while creating a parser.
65 * @throws IOException
68 public abstract XMLStreamReader read(XMLInputFactory xif) throws IOException, XMLStreamException;
69
70 /**
71 * Returns the {@link XMLStreamReader} that reads the document.
72 *
73 * <p>
74 * This method maybe invoked multiple times concurrently.
75 *
76 * @return
77 * The caller is responsible for closing the reader to avoid resource leak.
78 *
79 * @throws XMLStreamException
80 * if something goes wrong while creating a parser.
81 * @throws IOException
82 * if something goes wrong trying to read the document.
83 */
84 public abstract XMLStreamReader read() throws IOException, XMLStreamException;
85
86 /**
87 * System ID of this document.
88 */
89 public abstract URL getSystemId();
90
91 /**
92 * Creates {@link SDDocumentSource} from an URL.
93 */
94 public static SDDocumentSource create(final URL url) {
95 return new SDDocumentSource() {
96 private final URL systemId = url;
97
98 public XMLStreamReader read(XMLInputFactory xif) throws IOException, XMLStreamException {
99 InputStream is = url.openStream();
100 return new TidyXMLStreamReader(
101 xif.createXMLStreamReader(systemId.toExternalForm(),is), is);
102 }
103
104 public XMLStreamReader read() throws IOException, XMLStreamException {
105 InputStream is = url.openStream();
106 return new TidyXMLStreamReader(
107 XMLStreamReaderFactory.create(systemId.toExternalForm(),is,false), is);
108 }
109
110 public URL getSystemId() {
111 return systemId;
112 }
113 };
114 }
115
116 /**
117 * Creates {@link SDDocumentSource} from resource path using resolvingClass to read the resource.
118 * Required for Jigsaw runtime.
119 *
120 * @param resolvingClass class used to read resource
121 * @param path resource path
122 */
123 public static SDDocumentSource create(final Class resolvingClass, final String path) {
124 return new SDDocumentSource() {
125
126 public XMLStreamReader read(XMLInputFactory xif) throws IOException, XMLStreamException {
127 InputStream is = inputStream();
128 return new TidyXMLStreamReader(xif.createXMLStreamReader(path,is), is);
129 }
130
131 public XMLStreamReader read() throws IOException, XMLStreamException {
132 InputStream is = inputStream();
133 return new TidyXMLStreamReader(XMLStreamReaderFactory.create(path,is,false), is);
134 }
135
136 public URL getSystemId() {
137 try {
138 return new URL("file://" + path);
139 } catch (MalformedURLException e) {
140 return null;
141 }
142 }
143
144 private InputStream inputStream() throws IOException {
145 java.lang.reflect.Module module = resolvingClass.getModule();
146 if (module != null) {
147 InputStream stream = module.getResourceAsStream(path);
148 if (stream != null) {
149 return stream;
150 }
151 }
152 throw new ServerRtException("cannot.load.wsdl", path);
153 }
154
155 };
156 }
157
158 /**
159 * Creates a {@link SDDocumentSource} from {@link XMLStreamBuffer}.
160 */
161 public static SDDocumentSource create(final URL systemId, final XMLStreamBuffer xsb) {
162 return new SDDocumentSource() {
163 public XMLStreamReader read(XMLInputFactory xif) throws XMLStreamException {
164 return xsb.readAsXMLStreamReader();
165 }
166
167 public XMLStreamReader read() throws XMLStreamException {
168 return xsb.readAsXMLStreamReader();
169 }
170
171 public URL getSystemId() {
172 return systemId;
173 }
174 };
175 }
176 }
|
1 /*
2 * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.xml.internal.ws.api.server;
27
28 import com.sun.xml.internal.stream.buffer.XMLStreamBuffer;
29 import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory;
30 import com.sun.xml.internal.ws.server.ServerRtException;
31 import com.sun.xml.internal.ws.streaming.TidyXMLStreamReader;
32
33 import javax.xml.stream.XMLInputFactory;
34 import javax.xml.stream.XMLStreamException;
35 import javax.xml.stream.XMLStreamReader;
36 import java.io.IOException;
37 import java.io.InputStream;
38 import java.net.MalformedURLException;
39 import java.net.URL;
40
41 /**
42 * SPI that provides the source of {@link SDDocument}.
43 *
44 * <p>
45 * This abstract class could be implemented by applications, or one of the
46 * {@link #create} methods can be used.
47 *
48 * @author Kohsuke Kawaguchi
49 */
50 public abstract class SDDocumentSource {
51 /**
52 * Returns the {@link XMLStreamReader} that reads the document.
53 *
54 * <p>
55 * This method maybe invoked multiple times concurrently.
56 *
57 * @param xif
58 * The implementation may choose to use this object when it wants to
59 * create a new parser (or it can just ignore this parameter completely.)
60 * @return
61 * The caller is responsible for closing the reader to avoid resource leak.
62 *
63 * @throws XMLStreamException
64 * if something goes wrong while creating a parser.
65 * @throws IOException
68 public abstract XMLStreamReader read(XMLInputFactory xif) throws IOException, XMLStreamException;
69
70 /**
71 * Returns the {@link XMLStreamReader} that reads the document.
72 *
73 * <p>
74 * This method maybe invoked multiple times concurrently.
75 *
76 * @return
77 * The caller is responsible for closing the reader to avoid resource leak.
78 *
79 * @throws XMLStreamException
80 * if something goes wrong while creating a parser.
81 * @throws IOException
82 * if something goes wrong trying to read the document.
83 */
84 public abstract XMLStreamReader read() throws IOException, XMLStreamException;
85
86 /**
87 * System ID of this document.
88 * @return
89 */
90 public abstract URL getSystemId();
91
92 public static SDDocumentSource create(final Class<?> implClass, final String url) {
93 return create(url, implClass);
94 }
95
96 /**
97 * Creates {@link SDDocumentSource} from an URL.
98 * @param url
99 * @return
100 */
101 public static SDDocumentSource create(final URL url) {
102 return new SDDocumentSource() {
103 private final URL systemId = url;
104
105 @Override
106 public XMLStreamReader read(XMLInputFactory xif) throws IOException, XMLStreamException {
107 InputStream is = url.openStream();
108 return new TidyXMLStreamReader(
109 xif.createXMLStreamReader(systemId.toExternalForm(),is), is);
110 }
111
112 @Override
113 public XMLStreamReader read() throws IOException, XMLStreamException {
114 InputStream is = url.openStream();
115 return new TidyXMLStreamReader(
116 XMLStreamReaderFactory.create(systemId.toExternalForm(),is,false), is);
117 }
118
119 @Override
120 public URL getSystemId() {
121 return systemId;
122 }
123 };
124 }
125
126 /**
127 * Creates {@link SDDocumentSource} from resource path using resolvingClass to read the resource.
128 * Required for Jigsaw runtime.
129 *
130 * @param resolvingClass class used to read resource
131 * @param path resource path
132 */
133 private static SDDocumentSource create(final String path, final Class<?> resolvingClass) {
134 return new SDDocumentSource() {
135
136 @Override
137 public XMLStreamReader read(XMLInputFactory xif) throws IOException, XMLStreamException {
138 InputStream is = inputStream();
139 return new TidyXMLStreamReader(xif.createXMLStreamReader(path,is), is);
140 }
141
142 @Override
143 public XMLStreamReader read() throws IOException, XMLStreamException {
144 InputStream is = inputStream();
145 return new TidyXMLStreamReader(XMLStreamReaderFactory.create(path,is,false), is);
146 }
147
148 @Override
149 public URL getSystemId() {
150 try {
151 return new URL("file://" + path);
152 } catch (MalformedURLException e) {
153 return null;
154 }
155 }
156
157 private InputStream inputStream() throws IOException {
158 java.lang.reflect.Module module = resolvingClass.getModule();
159 if (module != null) {
160 InputStream stream = module.getResourceAsStream(path);
161 if (stream != null) {
162 return stream;
163 }
164 }
165 throw new ServerRtException("cannot.load.wsdl", path);
166 }
167
168 };
169 }
170
171 /**
172 * Creates a {@link SDDocumentSource} from {@link XMLStreamBuffer}.
173 * @param systemId
174 * @param xsb
175 * @return
176 */
177 public static SDDocumentSource create(final URL systemId, final XMLStreamBuffer xsb) {
178 return new SDDocumentSource() {
179 @Override
180 public XMLStreamReader read(XMLInputFactory xif) throws XMLStreamException {
181 return xsb.readAsXMLStreamReader();
182 }
183
184 @Override
185 public XMLStreamReader read() throws XMLStreamException {
186 return xsb.readAsXMLStreamReader();
187 }
188
189 @Override
190 public URL getSystemId() {
191 return systemId;
192 }
193 };
194 }
195 }
|