/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.jaxws.addressing; import org.apache.axis2.java.security.AccessController; import org.apache.axis2.jaxws.i18n.Messages; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAnyAttribute; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.namespace.QName; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.ws.EndpointReference; import javax.xml.ws.WebServiceException; import java.security.PrivilegedExceptionAction; import java.util.HashMap; import java.util.List; import java.util.Map; /** * <p>Java class for EndpointReferenceType complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="EndpointReferenceType"> * <complexContent> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * <sequence> * <element name="Address" type="{http://schemas.xmlsoap.org/ws/2004/08/addressing}AttributedURI"/> * <element name="ReferenceProperties" type="{http://schemas.xmlsoap.org/ws/2004/08/addressing}ReferencePropertiesType" minOccurs="0"/> * <element name="ReferenceParameters" type="{http://schemas.xmlsoap.org/ws/2004/08/addressing}ReferenceParametersType" minOccurs="0"/> * <element name="PortType" type="{http://schemas.xmlsoap.org/ws/2004/08/addressing}AttributedQName" minOccurs="0"/> * <element name="ServiceName" type="{http://schemas.xmlsoap.org/ws/2004/08/addressing}ServiceNameType" minOccurs="0"/> * <any/> * </sequence> * </restriction> * </complexContent> * </complexType> * </pre> * * */ @XmlRootElement(name = "EndpointReference", namespace = SubmissionEndpointReference.NS) @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "EndpointReferenceType", namespace = SubmissionEndpointReference.NS, propOrder = { "address", "referenceProperties", "referenceParameters", "portType", "serviceName", "any" }) public class SubmissionEndpointReference extends EndpointReference { protected static final String NS = "http://schemas.xmlsoap.org/ws/2004/08/addressing"; protected static JAXBContext jaxbContext; @XmlElement(name = "Address", namespace = NS, required = true) protected AttributedURI address; @XmlElement(name = "ReferenceProperties", namespace = NS) protected ReferencePropertiesType referenceProperties; @XmlElement(name = "ReferenceParameters", namespace = NS) protected ReferenceParametersType referenceParameters; @XmlElement(name = "PortType", namespace = NS) protected AttributedQName portType; @XmlElement(name = "ServiceName", namespace = NS) protected ServiceNameType serviceName; @XmlAnyElement(lax = true) protected List<Object> any; @XmlAnyAttribute private Map<QName, String> otherAttributes = new HashMap<QName, String>(); static { try { jaxbContext =(JAXBContext) AccessController.doPrivileged( new PrivilegedExceptionAction() { public Object run() throws JAXBException { return JAXBContext.newInstance(SubmissionEndpointReference.class); } }); } catch (Exception e) { throw new WebServiceException(Messages.getMessage("jaxbContextFailure", e.toString())); } } protected SubmissionEndpointReference() { } public SubmissionEndpointReference(Source eprInfoset) { super(); try { Unmarshaller um = jaxbContext.createUnmarshaller(); SubmissionEndpointReference subEPR = (SubmissionEndpointReference) um.unmarshal(eprInfoset); address = subEPR.address; referenceParameters = subEPR.referenceParameters; referenceProperties = subEPR.referenceProperties; portType = subEPR.portType; serviceName = subEPR.serviceName; any = subEPR.any; otherAttributes.putAll(subEPR.otherAttributes); } catch (Exception e) { throw new WebServiceException(Messages.getMessage("endpointRefConstructionFailure2", e.toString())); } } @Override public void writeTo(Result result) { if (result == null) { throw new IllegalArgumentException(Messages.getMessage("endpointReferenceWriteError1")); } try { Marshaller m = jaxbContext.createMarshaller(); m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); m.marshal(this, result); } catch (Exception e) { throw new WebServiceException(Messages.getMessage("endpointReferenceWriteError1", e.toString())); } } /** * <p>Java class for AttributedURI complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="AttributedURI"> * <simpleContent> * <extension base="<http://www.w3.org/2001/XMLSchema>anyURI"> * </extension> * </simpleContent> * </complexType> * </pre> * * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "AttributedURI", propOrder = { "value" }) private static class AttributedURI { @XmlValue @XmlSchemaType(name = "anyURI") protected String value; @XmlAnyAttribute private Map<QName, String> otherAttributes = new HashMap<QName, String>(); public AttributedURI() { } } /** * <p>Java class for ReferenceParametersType complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="ReferenceParametersType"> * <complexContent> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * <sequence> * <any/> * </sequence> * </restriction> * </complexContent> * </complexType> * </pre> * * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ReferenceParametersType", propOrder = { "any" }) private static class ReferenceParametersType { @XmlAnyElement(lax = true) protected List<Object> any; public ReferenceParametersType() { } } /** * <p>Java class for ReferencePropertiesType complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="ReferencePropertiesType"> * <complexContent> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * <sequence> * <any/> * </sequence> * </restriction> * </complexContent> * </complexType> * </pre> * * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ReferencePropertiesType", propOrder = { "any" }) private static class ReferencePropertiesType { @XmlAnyElement(lax = true) protected List<Object> any; public ReferencePropertiesType() { } } /** * <p>Java class for ServiceNameType complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="ServiceNameType"> * <simpleContent> * <extension base="<http://www.w3.org/2001/XMLSchema>QName"> * <attribute name="PortName" type="{http://www.w3.org/2001/XMLSchema}NCName" /> * </extension> * </simpleContent> * </complexType> * </pre> * * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ServiceNameType", propOrder = { "value" }) private static class ServiceNameType { @XmlValue protected QName value; @XmlAttribute(name = "PortName") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String portName; @XmlAnyAttribute private Map<QName, String> otherAttributes = new HashMap<QName, String>(); public ServiceNameType() { } } /** * <p>Java class for AttributedQName complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="AttributedQName"> * <simpleContent> * <extension base="<http://www.w3.org/2001/XMLSchema>QName"> * </extension> * </simpleContent> * </complexType> * </pre> * * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "AttributedQName", propOrder = { "value" }) private static class AttributedQName { @XmlValue protected QName value; @XmlAnyAttribute private Map<QName, String> otherAttributes = new HashMap<QName, String>(); public AttributedQName() { } } }