1 package org.objectweb.celtix.bus.ws.addressing.soap; 2 3 4 import java.util.Collections ; 5 import java.util.HashSet ; 6 import java.util.Set ; 7 import java.util.logging.Logger ; 8 9 import javax.xml.bind.JAXBException; 10 import javax.xml.bind.Marshaller; 11 import javax.xml.bind.Unmarshaller; 12 import javax.xml.namespace.QName ; 13 import javax.xml.soap.SOAPHeader ; 14 import javax.xml.soap.SOAPHeaderElement ; 15 16 import org.objectweb.celtix.bus.ws.addressing.Names; 17 import org.objectweb.celtix.common.logging.LogUtils; 18 19 import org.objectweb.celtix.ws.addressing.AttributedURIType; 23 import org.objectweb.celtix.ws.addressing.EndpointReferenceType; 24 import org.objectweb.celtix.ws.addressing.RelatesToType; 25 import org.objectweb.celtix.ws.addressing.v200408.AttributedURI; 26 import org.objectweb.celtix.ws.addressing.v200408.Relationship; 27 28 29 50 public class VersionTransformer 51 extends org.objectweb.celtix.bus.ws.addressing.VersionTransformer { 52 53 public static final Set <QName > HEADERS; 54 private static final Logger LOG = LogUtils.getL7dLogger(VersionTransformer.class); 55 56 protected MAPCodec codec; 57 58 63 public VersionTransformer(MAPCodec mapCodec) { 64 codec = mapCodec; 65 } 66 67 77 public <T> void encodeAsExposed(String exposeAs, 78 T value, 79 String localName, 80 Class <T> clz, 81 SOAPHeader header, 82 Marshaller marshaller) 83 throws JAXBException { 84 if (value != null) { 85 if (NATIVE_VERSION.equals(exposeAs)) { 86 codec.encodeMAP(value, 87 new QName (exposeAs, localName), 88 clz, 89 header, 90 marshaller); 91 } else if (Names200408.WSA_NAMESPACE_NAME.equals(exposeAs)) { 92 if (AttributedURIType.class.equals(clz)) { 93 codec.encodeMAP(convert((AttributedURIType)value), 94 new QName (exposeAs, localName), 95 AttributedURI.class, 96 header, 97 marshaller); 98 } else if (EndpointReferenceType.class.equals(clz)) { 99 codec.encodeMAP(convert((EndpointReferenceType)value), 100 new QName (exposeAs, localName), 101 Names200408.EPR_TYPE, 102 header, 103 marshaller); 104 105 } else if (RelatesToType.class.equals(clz)) { 106 codec.encodeMAP(convert((RelatesToType)value), 107 new QName (exposeAs, localName), 108 Relationship.class, 109 header, 110 marshaller); 111 112 } 113 } 114 } 115 } 116 117 126 @SuppressWarnings ("unchecked") 127 public <T> T decodeAsNative(String encodedAs, 128 Class <T> clz, 129 SOAPHeaderElement headerElement, 130 Unmarshaller unmarshaller) 131 throws JAXBException { 132 T ret = null; 133 LOG.fine("decodeAsNative: encodedAs: " + encodedAs); 134 LOG.fine(" class: " + clz.getName()); 135 136 if (NATIVE_VERSION.equals(encodedAs)) { 137 ret = codec.decodeMAP(clz, headerElement, unmarshaller); 138 } else if (Names200408.WSA_NAMESPACE_NAME.equals(encodedAs)) { 139 if (AttributedURIType.class.equals(clz)) { 140 return (T)convert(codec.decodeMAP(AttributedURI.class, 141 headerElement, 142 unmarshaller)); 143 } else if (EndpointReferenceType.class.equals(clz)) { 144 return (T)convert(codec.decodeMAP(Names200408.EPR_TYPE, 145 headerElement, 146 unmarshaller)); 147 } else if (RelatesToType.class.equals(clz)) { 148 return (T)convert(codec.decodeMAP(Relationship.class, 149 headerElement, 150 unmarshaller)); 151 } 152 } 153 return ret; 154 } 155 156 160 static { 161 Set <QName > headers = new HashSet <QName >(); 162 headers.addAll(Names.HEADERS); 163 Names200408.addHeaders(headers); 164 HEADERS = Collections.unmodifiableSet(headers); 165 } 166 167 170 public static final class Names200408 171 extends org.objectweb.celtix.bus.ws.addressing.VersionTransformer.Names200408 { 172 173 protected Names200408() { 174 } 175 176 181 private static void addHeaders(Set <QName > headers) { 182 headers.add(new QName (WSA_NAMESPACE_NAME, 183 Names.WSA_FROM_NAME)); 184 headers.add(new QName (WSA_NAMESPACE_NAME, 185 Names.WSA_TO_NAME)); 186 headers.add(new QName (WSA_NAMESPACE_NAME, 187 Names.WSA_REPLYTO_NAME)); 188 headers.add(new QName (WSA_NAMESPACE_NAME, 189 Names.WSA_FAULTTO_NAME)); 190 headers.add(new QName (WSA_NAMESPACE_NAME, 191 Names.WSA_ACTION_NAME)); 192 headers.add(new QName (WSA_NAMESPACE_NAME, 193 Names.WSA_MESSAGEID_NAME)); 194 } 195 } 196 } 197 | Popular Tags |