src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/BridgeAdapter.java

Wed, 01 Oct 2014 19:30:37 +0400

author
aefimov
date
Wed, 01 Oct 2014 19:30:37 +0400
changeset 658
45676aaa9d47
parent 397
b99d7e355d4b
child 637
9c07ef4934dd
permissions
-rw-r--r--

8038966: JAX-WS handles wrongly xsd:any arguments for Web services
Reviewed-by: coffeys

ohair@286 1 /*
ohair@286 2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
ohair@286 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ohair@286 4 *
ohair@286 5 * This code is free software; you can redistribute it and/or modify it
ohair@286 6 * under the terms of the GNU General Public License version 2 only, as
ohair@286 7 * published by the Free Software Foundation. Oracle designates this
ohair@286 8 * particular file as subject to the "Classpath" exception as provided
ohair@286 9 * by Oracle in the LICENSE file that accompanied this code.
ohair@286 10 *
ohair@286 11 * This code is distributed in the hope that it will be useful, but WITHOUT
ohair@286 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ohair@286 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ohair@286 14 * version 2 for more details (a copy is included in the LICENSE file that
ohair@286 15 * accompanied this code).
ohair@286 16 *
ohair@286 17 * You should have received a copy of the GNU General Public License version
ohair@286 18 * 2 along with this work; if not, write to the Free Software Foundation,
ohair@286 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ohair@286 20 *
ohair@286 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@286 22 * or visit www.oracle.com if you need additional information or have any
ohair@286 23 * questions.
ohair@286 24 */
ohair@286 25
ohair@286 26 package com.sun.xml.internal.bind.v2.runtime;
ohair@286 27
ohair@286 28 import java.io.IOException;
ohair@286 29 import java.io.InputStream;
ohair@286 30 import java.io.OutputStream;
ohair@286 31
ohair@286 32 import javax.xml.bind.JAXBException;
ohair@286 33 import javax.xml.bind.MarshalException;
ohair@286 34 import javax.xml.bind.Marshaller;
ohair@286 35 import javax.xml.bind.UnmarshalException;
ohair@286 36 import javax.xml.bind.Unmarshaller;
ohair@286 37 import javax.xml.bind.annotation.adapters.XmlAdapter;
ohair@286 38 import javax.xml.namespace.NamespaceContext;
ohair@286 39 import javax.xml.stream.XMLStreamException;
ohair@286 40 import javax.xml.stream.XMLStreamReader;
ohair@286 41 import javax.xml.stream.XMLStreamWriter;
ohair@286 42 import javax.xml.transform.Result;
ohair@286 43 import javax.xml.transform.Source;
ohair@286 44
ohair@286 45 import com.sun.istack.internal.NotNull;
ohair@286 46 import com.sun.xml.internal.bind.api.Bridge;
ohair@286 47 import com.sun.xml.internal.bind.api.TypeReference;
ohair@286 48 import com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl;
ohair@286 49
ohair@286 50 import org.w3c.dom.Node;
ohair@286 51 import org.xml.sax.ContentHandler;
ohair@286 52 import org.xml.sax.SAXException;
ohair@286 53
ohair@286 54 /**
ohair@286 55 * {@link Bridge} decorator for {@link XmlAdapter}.
ohair@286 56 *
ohair@286 57 * @author Kohsuke Kawaguchi
ohair@286 58 */
ohair@286 59 final class BridgeAdapter<OnWire,InMemory> extends InternalBridge<InMemory> {
ohair@286 60 private final InternalBridge<OnWire> core;
ohair@286 61 private final Class<? extends XmlAdapter<OnWire,InMemory>> adapter;
ohair@286 62
ohair@286 63 public BridgeAdapter(InternalBridge<OnWire> core, Class<? extends XmlAdapter<OnWire,InMemory>> adapter) {
ohair@286 64 super(core.getContext());
ohair@286 65 this.core = core;
ohair@286 66 this.adapter = adapter;
ohair@286 67 }
ohair@286 68
ohair@286 69 public void marshal(Marshaller m, InMemory inMemory, XMLStreamWriter output) throws JAXBException {
ohair@286 70 core.marshal(m,adaptM(m,inMemory),output);
ohair@286 71 }
ohair@286 72
ohair@286 73 public void marshal(Marshaller m, InMemory inMemory, OutputStream output, NamespaceContext nsc) throws JAXBException {
ohair@286 74 core.marshal(m,adaptM(m,inMemory),output,nsc);
ohair@286 75 }
ohair@286 76
ohair@286 77 public void marshal(Marshaller m, InMemory inMemory, Node output) throws JAXBException {
ohair@286 78 core.marshal(m,adaptM(m,inMemory),output);
ohair@286 79 }
ohair@286 80
ohair@286 81 public void marshal(Marshaller context, InMemory inMemory, ContentHandler contentHandler) throws JAXBException {
ohair@286 82 core.marshal(context,adaptM(context,inMemory),contentHandler);
ohair@286 83 }
ohair@286 84
ohair@286 85 public void marshal(Marshaller context, InMemory inMemory, Result result) throws JAXBException {
ohair@286 86 core.marshal(context,adaptM(context,inMemory),result);
ohair@286 87 }
ohair@286 88
ohair@286 89 private OnWire adaptM(Marshaller m,InMemory v) throws JAXBException {
ohair@286 90 XMLSerializer serializer = ((MarshallerImpl)m).serializer;
ohair@286 91 serializer.pushCoordinator();
ohair@286 92 try {
ohair@286 93 return _adaptM(serializer, v);
ohair@286 94 } finally {
ohair@286 95 serializer.popCoordinator();
ohair@286 96 }
ohair@286 97 }
ohair@286 98
ohair@286 99 private OnWire _adaptM(XMLSerializer serializer, InMemory v) throws MarshalException {
ohair@286 100 XmlAdapter<OnWire,InMemory> a = serializer.getAdapter(adapter);
ohair@286 101 try {
ohair@286 102 return a.marshal(v);
ohair@286 103 } catch (Exception e) {
ohair@286 104 serializer.handleError(e,v,null);
ohair@286 105 throw new MarshalException(e);
ohair@286 106 }
ohair@286 107 }
ohair@286 108
ohair@286 109
ohair@286 110 public @NotNull InMemory unmarshal(Unmarshaller u, XMLStreamReader in) throws JAXBException {
ohair@286 111 return adaptU(u, core.unmarshal(u,in));
ohair@286 112 }
ohair@286 113
ohair@286 114 public @NotNull InMemory unmarshal(Unmarshaller u, Source in) throws JAXBException {
ohair@286 115 return adaptU(u, core.unmarshal(u,in));
ohair@286 116 }
ohair@286 117
ohair@286 118 public @NotNull InMemory unmarshal(Unmarshaller u, InputStream in) throws JAXBException {
ohair@286 119 return adaptU(u, core.unmarshal(u,in));
ohair@286 120 }
ohair@286 121
ohair@286 122 public @NotNull InMemory unmarshal(Unmarshaller u, Node n) throws JAXBException {
ohair@286 123 return adaptU(u, core.unmarshal(u,n));
ohair@286 124 }
ohair@286 125
ohair@286 126 public TypeReference getTypeReference() {
ohair@286 127 return core.getTypeReference();
ohair@286 128 }
ohair@286 129
ohair@286 130 private @NotNull InMemory adaptU(Unmarshaller _u, OnWire v) throws JAXBException {
ohair@286 131 UnmarshallerImpl u = (UnmarshallerImpl) _u;
ohair@286 132 XmlAdapter<OnWire,InMemory> a = u.coordinator.getAdapter(adapter);
ohair@286 133 u.coordinator.pushCoordinator();
ohair@286 134 try {
ohair@286 135 return a.unmarshal(v);
ohair@286 136 } catch (Exception e) {
ohair@286 137 throw new UnmarshalException(e);
ohair@286 138 } finally {
ohair@286 139 u.coordinator.popCoordinator();
ohair@286 140 }
ohair@286 141 }
ohair@286 142
ohair@286 143 void marshal(InMemory o, XMLSerializer out) throws IOException, SAXException, XMLStreamException {
ohair@286 144 try {
ohair@286 145 core.marshal(_adaptM( XMLSerializer.getInstance(), o ), out );
ohair@286 146 } catch (MarshalException e) {
ohair@286 147 // recover from error by not marshalling this element.
ohair@286 148 }
ohair@286 149 }
ohair@286 150 }

mercurial