001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020 package javax.xml.ws.wsaddressing;
021
022 import javax.xml.bind.JAXBContext;
023 import javax.xml.bind.Marshaller;
024 import javax.xml.bind.Unmarshaller;
025 import javax.xml.bind.annotation.XmlAccessType;
026 import javax.xml.bind.annotation.XmlAccessorType;
027 import javax.xml.bind.annotation.XmlAnyAttribute;
028 import javax.xml.bind.annotation.XmlAnyElement;
029 import javax.xml.bind.annotation.XmlElement;
030 import javax.xml.bind.annotation.XmlRootElement;
031 import javax.xml.bind.annotation.XmlSchemaType;
032 import javax.xml.bind.annotation.XmlType;
033 import javax.xml.bind.annotation.XmlValue;
034 import javax.xml.namespace.QName;
035 import javax.xml.transform.Result;
036 import javax.xml.transform.Source;
037 import javax.xml.ws.EndpointReference;
038 import javax.xml.ws.WebServiceException;
039 import java.util.HashMap;
040 import java.util.List;
041 import java.util.Map;
042
043 /**
044 * <p>Java class for EndpointReferenceType complex type.
045 *
046 * <p>The following schema fragment specifies the expected content contained within this class.
047 *
048 * <pre>
049 * <complexType name="EndpointReferenceType">
050 * <complexContent>
051 * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
052 * <sequence>
053 * <element name="Address" type="{http://www.w3.org/2005/08/addressing}AttributedURIType"/>
054 * <element ref="{http://www.w3.org/2005/08/addressing}ReferenceParameters" minOccurs="0"/>
055 * <element ref="{http://www.w3.org/2005/08/addressing}Metadata" minOccurs="0"/>
056 * <any/>
057 * </sequence>
058 * </restriction>
059 * </complexContent>
060 * </complexType>
061 * </pre>
062 *
063 *
064 */
065 @XmlRootElement(name = "EndpointReference", namespace = W3CEndpointReference.NS)
066 @XmlType(name = "EndpointReferenceType", namespace = W3CEndpointReference.NS)
067 public final class W3CEndpointReference extends EndpointReference {
068 protected static final String NS = "http://www.w3.org/2005/08/addressing";
069 private static JAXBContext jaxbContext;
070
071 @XmlElement(name = "Address", namespace = NS, required = true)
072 private AttributedURIType address;
073 @XmlElement(name = "ReferenceParameters", namespace = NS)
074 private ReferenceParametersType referenceParameters;
075 @XmlElement(name = "Metadata", namespace = NS)
076 private MetadataType metadata;
077 @XmlAnyElement(lax = true)
078 private List<Object> any;
079 @XmlAnyAttribute
080 private Map<QName, String> otherAttributes = new HashMap<QName, String>();
081
082 static {
083 try {
084 jaxbContext = JAXBContext.newInstance(W3CEndpointReference.class);
085 }
086 catch (Exception e) {
087 //TODO NLS enable
088 throw new WebServiceException("JAXBContext creation failed.", e);
089 }
090 }
091
092 protected W3CEndpointReference() {
093 }
094
095 public W3CEndpointReference(Source eprInfoset) {
096 super();
097
098 try {
099 Unmarshaller um = jaxbContext.createUnmarshaller();
100 W3CEndpointReference w3cEPR = (W3CEndpointReference) um.unmarshal(eprInfoset);
101
102 address = w3cEPR.address;
103 referenceParameters = w3cEPR.referenceParameters;
104 metadata = w3cEPR.metadata;
105 any = w3cEPR.any;
106 otherAttributes.putAll(w3cEPR.otherAttributes);
107 }
108 catch (Exception e) {
109 //TODO NLS enable.
110 throw new WebServiceException("Unable to create W3C endpoint reference.", e);
111 }
112 }
113
114 @Override
115 public void writeTo(Result result) {
116 if (result == null) {
117 //TODO NLS enable
118 throw new IllegalArgumentException("Null is not allowed.");
119 }
120
121 try {
122 Marshaller m = jaxbContext.createMarshaller();
123 m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
124 m.marshal(this, result);
125 }
126 catch (Exception e) {
127 //TODO NLS enable
128 throw new WebServiceException("writeTo failure.", e);
129 }
130 }
131
132 /**
133 * <p>Java class for AttributedURIType complex type.
134 *
135 * <p>The following schema fragment specifies the expected content contained within this class.
136 *
137 * <pre>
138 * <complexType name="AttributedURIType">
139 * <simpleContent>
140 * <extension base="<http://www.w3.org/2001/XMLSchema>anyURI">
141 * </extension>
142 * </simpleContent>
143 * </complexType>
144 * </pre>
145 *
146 *
147 */
148 @XmlAccessorType(XmlAccessType.FIELD)
149 @XmlType(name = "AttributedURIType", propOrder = {
150 "value"
151 })
152 private static class AttributedURIType {
153
154 @XmlValue
155 @XmlSchemaType(name = "anyURI")
156 protected String value;
157 @XmlAnyAttribute
158 private Map<QName, String> otherAttributes = new HashMap<QName, String>();
159
160 public AttributedURIType() {
161 }
162 }
163
164 /**
165 * <p>Java class for ReferenceParametersType complex type.
166 *
167 * <p>The following schema fragment specifies the expected content contained within this class.
168 *
169 * <pre>
170 * <complexType name="ReferenceParametersType">
171 * <complexContent>
172 * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
173 * <sequence>
174 * <any/>
175 * </sequence>
176 * </restriction>
177 * </complexContent>
178 * </complexType>
179 * </pre>
180 *
181 *
182 */
183 @XmlAccessorType(XmlAccessType.FIELD)
184 @XmlType(name = "ReferenceParametersType", propOrder = {
185 "any"
186 })
187 private static class ReferenceParametersType {
188
189 @XmlAnyElement(lax = true)
190 protected List<Object> any;
191 @XmlAnyAttribute
192 private Map<QName, String> otherAttributes = new HashMap<QName, String>();
193
194 public ReferenceParametersType() {
195 }
196 }
197
198 /**
199 * <p>Java class for MetadataType complex type.
200 *
201 * <p>The following schema fragment specifies the expected content contained within this class.
202 *
203 * <pre>
204 * <complexType name="MetadataType">
205 * <complexContent>
206 * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
207 * <sequence>
208 * <any/>
209 * </sequence>
210 * </restriction>
211 * </complexContent>
212 * </complexType>
213 * </pre>
214 *
215 *
216 */
217 @XmlAccessorType(XmlAccessType.FIELD)
218 @XmlType(name = "MetadataType", propOrder = {
219 "any"
220 })
221 private static class MetadataType {
222
223 @XmlAnyElement(lax = true)
224 protected List<Object> any;
225 @XmlAnyAttribute
226 private Map<QName, String> otherAttributes = new HashMap<QName, String>();
227
228 public MetadataType() {
229 }
230 }
231 }