/* * 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.jaxws.ExceptionFactory; import org.apache.axis2.jaxws.addressing.util.EndpointReferenceUtils; import org.apache.axis2.jaxws.i18n.Messages; import org.w3c.dom.Element; import javax.xml.namespace.QName; import java.util.ArrayList; import java.util.List; /** * This class can be used to create instances of {@link SubmissionEndpointReference}. * * @see javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder */ public final class SubmissionEndpointReferenceBuilder { private static final Element[] ZERO_LENGTH_ARRAY = new Element[0]; private String address; private QName serviceName; private QName endpointName; private String wsdlDocumentLocation; private List<Element> referenceParameters; private QName portType; /** * Constructor * */ public SubmissionEndpointReferenceBuilder() { } /** * Add the address URI to use. * * @param address the address URI * @return an instance of <code>SubmissionEndpointReferenceBuilder</code> that has * been updated as specified. */ public SubmissionEndpointReferenceBuilder address(String address) { this.address = address; return this; } /** * Add the WSDL service name of the endpoint that the endpoint reference will target. * * @param serviceName the WSDL service name * @return an instance of <code>SubmissionEndpointReferenceBuilder</code> that has * been updated as specified. */ public SubmissionEndpointReferenceBuilder serviceName(QName serviceName) { this.serviceName = serviceName; return this; } /** * Add the WSDL port name of the endpoint that the endpoint reference will target. * The WSDL port name can only be set after the WSDL service name has been set. * * @param endpointName the WSDL port name * @return an instance of <code>SubmissionEndpointReferenceBuilder</code> that has * been updated as specified. */ public SubmissionEndpointReferenceBuilder endpointName(QName endpointName) { if (this.serviceName == null) { throw new IllegalStateException(Messages.getMessage("endpointQNameSetError", endpointName.toString())); } this.endpointName = endpointName; return this; } /** * Add the URI from where the WSDL for the endpoint that the endpoint reference will * target can be retrieved. * * @param wsdlDocumentLocation the location URI of the WSDL * @return an instance of <code>SubmissionEndpointReferenceBuilder</code> that has * been updated as specified. */ public SubmissionEndpointReferenceBuilder wsdlDocumentLocation(String wsdlDocumentLocation) { this.wsdlDocumentLocation = wsdlDocumentLocation; return this; } /** * Add reference properties. These will appear in the endpoint reference as reference * parameters. * * @param referenceProperty the reference property * @return an instance of <code>SubmissionEndpointReferenceBuilder</code> that has * been updated as specified. */ public SubmissionEndpointReferenceBuilder referenceProperty(Element referenceProperty) { if (referenceProperty == null) { throw new IllegalArgumentException(Messages.getMessage("referencePropertyNullErr")); } if (this.referenceParameters == null) { this.referenceParameters = new ArrayList<Element>(); } this.referenceParameters.add(referenceProperty); return this; } /** * Add reference parameters. * * @param referenceParameter the reference parameter * @return an instance of <code>SubmissionEndpointReferenceBuilder</code> that has * been updated as specified. */ public SubmissionEndpointReferenceBuilder referenceParameter(Element referenceParameter) { if (referenceParameter == null) { throw new IllegalArgumentException(Messages.getMessage("referenceParameterNullErr")); } if (this.referenceParameters == null) { this.referenceParameters = new ArrayList<Element>(); } this.referenceParameters.add(referenceParameter); return this; } /** * Add the name of the WSDL port type. * * @param portType the WSDL port type name * @return an instance of <code>SubmissionEndpointReferenceBuilder</code> that has * been updated as specified. */ public SubmissionEndpointReferenceBuilder portType(QName portType) { this.portType = portType; return this; } /** * Construct an instance of <code>EndpointReference</code> based on the values * specified. * * @return an instance of <code>SubmissionEndpointReference</code> */ public SubmissionEndpointReference build() { SubmissionEndpointReference submissionEPR = null; String addressingNamespace = EndpointReferenceUtils.getAddressingNamespace(SubmissionEndpointReference.class); org.apache.axis2.addressing.EndpointReference axis2EPR = EndpointReferenceUtils.createAxis2EndpointReference(address, serviceName, endpointName, wsdlDocumentLocation, addressingNamespace); try { if (referenceParameters != null) EndpointReferenceUtils.addReferenceParameters(axis2EPR, referenceParameters.toArray(ZERO_LENGTH_ARRAY)); if (portType != null) EndpointReferenceUtils.addInterface(axis2EPR, portType, addressingNamespace); submissionEPR = (SubmissionEndpointReference) EndpointReferenceUtils.convertFromAxis2(axis2EPR, addressingNamespace); } catch (Exception e) { throw ExceptionFactory.makeWebServiceException( Messages.getMessage("endpointRefConstructionFailure2", e.toString())); } return submissionEPR; } @Override public String toString() { StringBuffer buffer = new StringBuffer(); if (address != null) { buffer.append("Address: ").append(address); } if (serviceName != null) { buffer.append(", Service name: ").append(serviceName); } if (endpointName != null) { buffer.append(", Endpoint name: ").append(endpointName); } if (portType != null) { buffer.append(", Port type: ").append(portType); } if (referenceParameters != null) { buffer.append(", Reference parameters: ").append(referenceParameters); } if (wsdlDocumentLocation != null) { buffer.append(", WSDL location: ").append(wsdlDocumentLocation); } return buffer.toString(); } }