Thu, 12 Oct 2017 19:44:07 +0800
merge
1 /*
2 * Copyright (c) 1997, 2012, 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 */
26 package com.sun.xml.internal.ws.spi.db;
28 import java.io.InputStream;
29 import java.io.OutputStream;
31 import javax.xml.bind.JAXBException;
32 import javax.xml.bind.Marshaller;
33 import javax.xml.bind.Unmarshaller;
34 import javax.xml.bind.attachment.AttachmentMarshaller;
35 import javax.xml.bind.attachment.AttachmentUnmarshaller;
36 import javax.xml.namespace.NamespaceContext;
37 import javax.xml.stream.XMLStreamReader;
38 import javax.xml.stream.XMLStreamWriter;
39 import javax.xml.transform.Result;
40 import javax.xml.transform.Source;
42 import com.sun.istack.internal.NotNull;
43 import com.sun.istack.internal.Nullable;
44 import com.sun.xml.internal.bind.api.BridgeContext;
45 import com.sun.xml.internal.bind.v2.runtime.BridgeContextImpl;
46 import com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl;
48 import org.w3c.dom.Node;
49 import org.xml.sax.ContentHandler;
51 /**
52 * Mini-marshaller/unmarshaller that is specialized for a particular
53 * element name and a type.
54 *
55 * <p>
56 * Instances of this class is stateless and multi-thread safe.
57 * They are reentrant.
58 *
59 * <p>
60 * All the marshal operation generates fragments.
61 *
62 * <p>
63 * <b>Subject to change without notice</b>.
64 *
65 * @since JAXB 2.0 EA1
66 * @author Kohsuke Kawaguchi
67 */
68 public abstract class OldBridge<T> {
69 protected OldBridge(JAXBContextImpl context) {
70 this.context = context;
71 }
73 protected final JAXBContextImpl context;
75 /**
76 * Gets the {@link BindingContext} to which this object belongs.
77 *
78 * @since 2.1
79 */
80 public @NotNull BindingContext getContext() {
81 // return context;
82 return null;
83 }
85 /**
86 *
87 * @throws JAXBException
88 * if there was an error while marshalling.
89 *
90 * @since 2.0 EA1
91 */
92 public final void marshal(T object,XMLStreamWriter output) throws JAXBException {
93 marshal(object,output,null);
94 }
95 public final void marshal(T object,XMLStreamWriter output, AttachmentMarshaller am) throws JAXBException {
96 Marshaller m = context.marshallerPool.take();
97 m.setAttachmentMarshaller(am);
98 marshal(m,object,output);
99 m.setAttachmentMarshaller(null);
100 context.marshallerPool.recycle(m);
101 }
103 public final void marshal(@NotNull BridgeContext context,T object,XMLStreamWriter output) throws JAXBException {
104 marshal( ((BridgeContextImpl)context).marshaller, object, output );
105 }
107 public abstract void marshal(@NotNull Marshaller m,T object,XMLStreamWriter output) throws JAXBException;
110 /**
111 * Marshals the specified type object with the implicit element name
112 * associated with this instance of {@link XMLBridge}.
113 *
114 * @param nsContext
115 * if this marshalling is done to marshal a subelement, this {@link NamespaceContext}
116 * represents in-scope namespace bindings available for that element. Can be null,
117 * in which case JAXB assumes no in-scope namespaces.
118 * @throws JAXBException
119 * if there was an error while marshalling.
120 *
121 * @since 2.0 EA1
122 */
123 public void marshal(T object,OutputStream output, NamespaceContext nsContext) throws JAXBException {
124 marshal(object,output,nsContext,null);
125 }
126 /**
127 * @since 2.0.2
128 */
129 public void marshal(T object,OutputStream output, NamespaceContext nsContext, AttachmentMarshaller am) throws JAXBException {
130 Marshaller m = context.marshallerPool.take();
131 m.setAttachmentMarshaller(am);
132 marshal(m,object,output,nsContext);
133 m.setAttachmentMarshaller(null);
134 context.marshallerPool.recycle(m);
135 }
137 public final void marshal(@NotNull BridgeContext context,T object,OutputStream output, NamespaceContext nsContext) throws JAXBException {
138 marshal( ((BridgeContextImpl)context).marshaller, object, output, nsContext );
139 }
141 public abstract void marshal(@NotNull Marshaller m,T object,OutputStream output, NamespaceContext nsContext) throws JAXBException;
144 public final void marshal(T object,Node output) throws JAXBException {
145 Marshaller m = context.marshallerPool.take();
146 marshal(m,object,output);
147 context.marshallerPool.recycle(m);
148 }
150 public final void marshal(@NotNull BridgeContext context,T object,Node output) throws JAXBException {
151 marshal( ((BridgeContextImpl)context).marshaller, object, output );
152 }
154 public abstract void marshal(@NotNull Marshaller m,T object,Node output) throws JAXBException;
157 /**
158 * @since 2.0 EA4
159 */
160 public final void marshal(T object, ContentHandler contentHandler) throws JAXBException {
161 marshal(object,contentHandler,null);
162 }
163 /**
164 * @since 2.0.2
165 */
166 public final void marshal(T object, ContentHandler contentHandler, AttachmentMarshaller am) throws JAXBException {
167 Marshaller m = context.marshallerPool.take();
168 m.setAttachmentMarshaller(am);
169 marshal(m,object,contentHandler);
170 m.setAttachmentMarshaller(null);
171 context.marshallerPool.recycle(m);
172 }
173 public final void marshal(@NotNull BridgeContext context,T object, ContentHandler contentHandler) throws JAXBException {
174 marshal( ((BridgeContextImpl)context).marshaller, object, contentHandler );
175 }
176 public abstract void marshal(@NotNull Marshaller m,T object, ContentHandler contentHandler) throws JAXBException;
178 /**
179 * @since 2.0 EA4
180 */
181 public final void marshal(T object, Result result) throws JAXBException {
182 Marshaller m = context.marshallerPool.take();
183 marshal(m,object,result);
184 context.marshallerPool.recycle(m);
185 }
186 public final void marshal(@NotNull BridgeContext context,T object, Result result) throws JAXBException {
187 marshal( ((BridgeContextImpl)context).marshaller, object, result );
188 }
189 public abstract void marshal(@NotNull Marshaller m,T object, Result result) throws JAXBException;
193 private T exit(T r, Unmarshaller u) {
194 u.setAttachmentUnmarshaller(null);
195 context.unmarshallerPool.recycle(u);
196 return r;
197 }
199 /**
200 * Unmarshals the specified type object.
201 *
202 * @param in
203 * the parser must be pointing at a start tag
204 * that encloses the XML type that this {@link XMLBridge} is
205 * instanciated for.
206 *
207 * @return
208 * never null.
209 *
210 * @throws JAXBException
211 * if there was an error while unmarshalling.
212 *
213 * @since 2.0 EA1
214 */
215 public final @NotNull T unmarshal(@NotNull XMLStreamReader in) throws JAXBException {
216 return unmarshal(in,null);
217 }
218 /**
219 * @since 2.0.3
220 */
221 public final @NotNull T unmarshal(@NotNull XMLStreamReader in, @Nullable AttachmentUnmarshaller au) throws JAXBException {
222 Unmarshaller u = context.unmarshallerPool.take();
223 u.setAttachmentUnmarshaller(au);
224 return exit(unmarshal(u,in),u);
225 }
226 public final @NotNull T unmarshal(@NotNull BridgeContext context, @NotNull XMLStreamReader in) throws JAXBException {
227 return unmarshal( ((BridgeContextImpl)context).unmarshaller, in );
228 }
229 public abstract @NotNull T unmarshal(@NotNull Unmarshaller u, @NotNull XMLStreamReader in) throws JAXBException;
231 /**
232 * Unmarshals the specified type object.
233 *
234 * @param in
235 * the parser must be pointing at a start tag
236 * that encloses the XML type that this {@link XMLBridge} is
237 * instanciated for.
238 *
239 * @return
240 * never null.
241 *
242 * @throws JAXBException
243 * if there was an error while unmarshalling.
244 *
245 * @since 2.0 EA1
246 */
247 public final @NotNull T unmarshal(@NotNull Source in) throws JAXBException {
248 return unmarshal(in,null);
249 }
250 /**
251 * @since 2.0.3
252 */
253 public final @NotNull T unmarshal(@NotNull Source in, @Nullable AttachmentUnmarshaller au) throws JAXBException {
254 Unmarshaller u = context.unmarshallerPool.take();
255 u.setAttachmentUnmarshaller(au);
256 return exit(unmarshal(u,in),u);
257 }
258 public final @NotNull T unmarshal(@NotNull BridgeContext context, @NotNull Source in) throws JAXBException {
259 return unmarshal( ((BridgeContextImpl)context).unmarshaller, in );
260 }
261 public abstract @NotNull T unmarshal(@NotNull Unmarshaller u, @NotNull Source in) throws JAXBException;
263 /**
264 * Unmarshals the specified type object.
265 *
266 * @param in
267 * the parser must be pointing at a start tag
268 * that encloses the XML type that this {@link XMLBridge} is
269 * instanciated for.
270 *
271 * @return
272 * never null.
273 *
274 * @throws JAXBException
275 * if there was an error while unmarshalling.
276 *
277 * @since 2.0 EA1
278 */
279 public final @NotNull T unmarshal(@NotNull InputStream in) throws JAXBException {
280 Unmarshaller u = context.unmarshallerPool.take();
281 return exit(unmarshal(u,in),u);
282 }
283 public final @NotNull T unmarshal(@NotNull BridgeContext context, @NotNull InputStream in) throws JAXBException {
284 return unmarshal( ((BridgeContextImpl)context).unmarshaller, in );
285 }
286 public abstract @NotNull T unmarshal(@NotNull Unmarshaller u, @NotNull InputStream in) throws JAXBException;
288 /**
289 * Unmarshals the specified type object.
290 *
291 * @param n
292 * Node to be unmarshalled.
293 *
294 * @return
295 * never null.
296 *
297 * @throws JAXBException
298 * if there was an error while unmarshalling.
299 *
300 * @since 2.0 FCS
301 */
302 public final @NotNull T unmarshal(@NotNull Node n) throws JAXBException {
303 return unmarshal(n,null);
304 }
305 /**
306 * @since 2.0.3
307 */
308 public final @NotNull T unmarshal(@NotNull Node n, @Nullable AttachmentUnmarshaller au) throws JAXBException {
309 Unmarshaller u = context.unmarshallerPool.take();
310 u.setAttachmentUnmarshaller(au);
311 return exit(unmarshal(u,n),u);
312 }
313 public final @NotNull T unmarshal(@NotNull BridgeContext context, @NotNull Node n) throws JAXBException {
314 return unmarshal( ((BridgeContextImpl)context).unmarshaller, n );
315 }
316 public abstract @NotNull T unmarshal(@NotNull Unmarshaller context, @NotNull Node n) throws JAXBException;
318 /**
319 * Gets the {@link TypeInfo} from which this bridge was created.
320 */
321 public abstract TypeInfo getTypeReference();
322 }