blob: e9326289b44a98da496cbfc6951746d3e280d121 [file] [log] [blame]
/*
* 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();
}
}