Minor cleanup and code formatting to help readability.

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@686584 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
jsdelfino 2008-08-17 06:31:07 +00:00
parent 2191eee639
commit 9548ff6b10
12 changed files with 608 additions and 693 deletions

View file

@ -35,6 +35,7 @@ public interface BPELFactory {
/**
* Creates a new BPEL Process Definition
*
* @return
*/
BPELProcessDefinition createBPELProcessDefinition();

View file

@ -32,35 +32,43 @@ public interface BPELImplementation extends Implementation {
/**
* Get the BPEL process Name
*
* @return
*/
QName getProcess();
/**
* Set the BPEL process Name
*
* @param processName process QName
*/
void setProcess(QName processName);
/**
* Get the BPEL process definition
*
* @return
*/
BPELProcessDefinition getProcessDefinition();
/**
* Set the BPEL process definition
*
* @param processDefinition
*/
void setProcessDefinition(BPELProcessDefinition processDefinition);
/**
* Returns the componentType for this Spring implementation
* Returns the componentType for this implementation.
*
* @return
*/
public ComponentType getComponentType();
/**
* Sets the componentType for this Spring implementation
* @parma componentType the component type to set
* Sets the componentType for this implementation
*
* @param componentType the component type to set
*/
public void setComponentType(ComponentType componentType);
}

View file

@ -19,25 +19,20 @@
package org.apache.tuscany.sca.implementation.bpel;
import java.util.List;
import java.util.Collection;
import java.net.URI;
import java.net.URL;
import java.util.List;
import javax.xml.namespace.QName;
import javax.wsdl.PortType;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.assembly.Base;
import org.apache.tuscany.sca.implementation.bpel.xml.BPELPartnerLinkElement;
import org.apache.tuscany.sca.implementation.bpel.xml.BPELImportElement;
import org.apache.tuscany.sca.implementation.bpel.xml.BPELPartnerLinkElement;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
/**
* The BPEL process definition.
* The model representing a BPEL process definition.
*
* @version $Rev$ $Date$
*/
@ -45,70 +40,70 @@ public interface BPELProcessDefinition extends Base {
/**
* Get the BPEL process Name
*
* @return
*/
QName getName();
/**
* Set the BPEL process Name
*
* @param processName process QName
*/
void setName(QName name);
/**
* Get BPEL process URI
*
* @return URI for the process
*/
URI getURI();
/**
* Set the BPEL process URI
*
* @param uri for the process
*/
void setURI(URI uri);
/**
* Get the URL for the process location
*
* @return
*/
URL getLocation();
/**
* Set the URL for the process location
*
* @param url
*/
void setLocation(URL location);
/**
* Return the list of PartnerLinks for this process
*
* @return
*/
List<BPELPartnerLinkElement> getPartnerLinks();
/**
* Return the list of imports for this process
*
* @return
*/
List<BPELImportElement> getImports();
/**
* Set the associated collection of port types
* @param thePortTypes
*/
public void setPortTypes( Collection<PortType> thePortTypes ) ;
/**
* Return the collection of associated port types
*
* @return
*/
public Collection<PortType> getPortTypes() ;
/**
* Set the associated collection of WSDL interfaces
* @param theInterfaces
*/
public void setInterfaces( Collection<WSDLInterface> theInterfaces ) ;
public List<PortType> getPortTypes() ;
/**
* Return the collection of associated WSDL interfaces
* @return
*/
public Collection<WSDLInterface> getInterfaces() ;
public List<WSDLInterface> getInterfaces() ;
}

View file

@ -19,11 +19,9 @@
package org.apache.tuscany.sca.implementation.bpel;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
import org.apache.tuscany.sca.implementation.bpel.impl.BPELImplementationImpl;
import org.apache.tuscany.sca.implementation.bpel.impl.BPELProcessDefinitionImpl;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
/**
* A default factory for the BPEL implementation model.
@ -32,22 +30,15 @@ import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
*/
public class DefaultBPELFactory implements BPELFactory {
private AssemblyFactory assemblyFactory;
private WSDLFactory wsdlFactory;
public DefaultBPELFactory(ModelFactoryExtensionPoint modelFactories) {
this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
this.wsdlFactory = modelFactories.getFactory(WSDLFactory.class);
}
public BPELImplementation createBPELImplementation() {
return new BPELImplementationImpl(assemblyFactory, wsdlFactory);
return new BPELImplementationImpl();
}
public BPELProcessDefinition createBPELProcessDefinition() {
return new BPELProcessDefinitionImpl();
}
}

View file

@ -82,7 +82,6 @@ public class BPELDocumentProcessor extends BaseStAXArtifactProcessor implements
private static final QName IMPORT_ELEMENT = new QName(BPEL_NS, "import");
private static final String LINKTYPE_NAME = "partnerLinkType";
private static final QName LINKTYPE_ELEMENT = new QName(BPEL_PLINK_NS, LINKTYPE_NAME);
public final static String NAME_ELEMENT = "name";
private final static XMLInputFactory inputFactory = XMLInputFactory.newInstance();
@ -97,49 +96,6 @@ public class BPELDocumentProcessor extends BaseStAXArtifactProcessor implements
this.monitor = monitor;
}
/**
* Report a warning.
*
* @param problems
* @param message
* @param model
*/
private void warning(String message, Object model, Object... messageParameters) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.WARNING, model, message, (Object[])messageParameters);
monitor.problem(problem);
}
}
/**
* Report a error.
*
* @param problems
* @param message
* @param model
*/
private void error(String message, Object model, Object... messageParameters) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
monitor.problem(problem);
}
}
/**
* Report a exception.
*
* @param problems
* @param message
* @param model
*/
private void error(String message, Object model, Exception ex) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.ERROR, model, message, ex);
monitor.problem(problem);
}
}
public String getArtifactType() {
return "*.bpel";
}
@ -151,28 +107,21 @@ public class BPELDocumentProcessor extends BaseStAXArtifactProcessor implements
public BPELProcessDefinition read(URL contributionURL, URI artifactURI, URL artifactURL) throws ContributionReadException {
BPELProcessDefinition processDefinition = null;
try {
//for now we are just using process name
//and relying on componentType file for service definition
//so it's OK to set resolved for now
processDefinition = indexRead2(artifactURL);
// for now we are just using process name
// and relying on componentType file for service definition
// so it's OK to set resolved for now
processDefinition = readProcessDefinition(artifactURL);
processDefinition.setURI(artifactURI);
processDefinition.setUnresolved(false);
} catch (Exception e) {
ContributionReadException ce = new ContributionReadException(e);
error("ContributionReadException", artifactURL, ce);
//throw ce;
ContributionReadException ce = new ContributionReadException(e);
error("ContributionReadException", artifactURL, ce);
}
return processDefinition;
}
/**
* Resolve the BPEL process
* - one of the things that needs doing is to pin down the WSDLs that are being used by
* the process, in particular the partnerLinkType and the related PortType definitions
*/
public void resolve(BPELProcessDefinition model, ModelResolver resolver)
throws ContributionResolveException {
public void resolve(BPELProcessDefinition model, ModelResolver resolver) throws ContributionResolveException {
// FIXME - serious resolving needs to happen here
// Step 1 is to resolve the WSDL files referenced from this BPEL process
@ -188,30 +137,29 @@ public class BPELDocumentProcessor extends BaseStAXArtifactProcessor implements
// callback interface.
List<BPELImportElement> theImports = model.getImports();
for ( BPELImportElement theImport : theImports ) {
// Deal with WSDL imports
if ( theImport.getImportType().equals("http://schemas.xmlsoap.org/wsdl/") ) {
String WSDLLocation = theImport.getLocation();
String WSDLNamespace = theImport.getNamespace();
// Resolve the WSDL definition
for (BPELImportElement theImport : theImports) {
// Deal with WSDL imports
if (theImport.getImportType().equals("http://schemas.xmlsoap.org/wsdl/")) {
String WSDLLocation = theImport.getLocation();
String WSDLNamespace = theImport.getNamespace();
// Resolve the WSDL definition
WSDLDefinition proxy = WSDLfactory.createWSDLDefinition();
proxy.setUnresolved(true);
proxy.setNamespace(WSDLNamespace);
if ( WSDLLocation != null ) proxy.setLocation(URI.create(WSDLLocation));
if (WSDLLocation != null) {
proxy.setLocation(URI.create(WSDLLocation));
}
WSDLDefinition resolved = resolver.resolveModel(WSDLDefinition.class, proxy);
if (resolved != null && !resolved.isUnresolved()) {
theImport.setWSDLDefinition( resolved );
theImport.setWSDLDefinition(resolved);
} else {
error("CannotResolveWSDLReference", resolver, WSDLLocation, WSDLNamespace);
//throw new ContributionResolveException("BPELDocumentProcessor:resolve -" +
//" unable to resolve WSDL referenced by BPEL import" +
//"WSDL location: " + WSDLLocation + " WSDLNamespace: " +
//WSDLNamespace );
return;
} // end if
} // end if
} // end for
} // end if
} // end if
} // end for
// Fetch the sets of partner links, port types and interfaces
List<BPELPartnerLinkTypeElement> thePLinkTypes = getPartnerLinkTypes( theImports );
@ -219,157 +167,140 @@ public class BPELDocumentProcessor extends BaseStAXArtifactProcessor implements
Collection<PortType> thePortTypes = getAllPortTypes( theImports, theInterfaces, resolver );
// Store the Port Types and the Interfaces for later calculation of the component type...
model.setPortTypes(thePortTypes);
model.setInterfaces(theInterfaces);
model.getPortTypes().addAll(thePortTypes);
model.getInterfaces().addAll(theInterfaces);
// Now, for each partnerLink in the BPEL process, find the related partnerLinkType
// element
List<BPELPartnerLinkElement> thePartnerLinks = model.getPartnerLinks();
for ( BPELPartnerLinkElement thePartnerLink : thePartnerLinks ) {
QName partnerLinkType = thePartnerLink.getPartnerLinkType();
BPELPartnerLinkTypeElement pLinkType =
findPartnerLinkType( partnerLinkType, thePLinkTypes );
if( pLinkType == null ) {
error("PartnerLinkNoMatchingType", thePartnerLink, thePartnerLink.getName());
//throw new ContributionResolveException( "PartnerLink "
//+ thePartnerLink.getName() + " has no matching partner link type");
} else
thePartnerLink.setPartnerLinkType(pLinkType);
} // end for
List<BPELPartnerLinkElement> thePartnerLinks = model.getPartnerLinks();
for (BPELPartnerLinkElement thePartnerLink : thePartnerLinks) {
QName partnerLinkType = thePartnerLink.getPartnerLinkType();
BPELPartnerLinkTypeElement pLinkType = findPartnerLinkType(partnerLinkType, thePLinkTypes);
if (pLinkType == null) {
error("PartnerLinkNoMatchingType", thePartnerLink, thePartnerLink.getName());
} else
thePartnerLink.setPartnerLinkType(pLinkType);
} // end for
} // end resolve
/*
/**
* Retrieve all the Partner Link types defined in the imported WSDL files
*
* @param theImports
*/
private List<BPELPartnerLinkTypeElement> getPartnerLinkTypes( List<BPELImportElement> theImports )
throws ContributionResolveException {
private List<BPELPartnerLinkTypeElement> getPartnerLinkTypes( List<BPELImportElement> theImports) throws ContributionResolveException {
List<BPELPartnerLinkTypeElement> thePLinks =
new ArrayList<BPELPartnerLinkTypeElement>();
// We must find the partner link type elements from amongst the imported WSDLs
for ( BPELImportElement theImport : theImports ){
WSDLDefinition theWSDL = theImport.getWSDLDefinition();
Definition WSDLDefinition = theWSDL.getDefinition();
// The BPEL partnerLinkType elements are extension elements within the WSDL
List<ExtensibilityElement> extensibilityElements = WSDLDefinition.getExtensibilityElements();
for ( ExtensibilityElement theElement : extensibilityElements ) {
QName elementType = theElement.getElementType();
if ( elementType.equals( LINKTYPE_ELEMENT ) ) {
BPELPartnerLinkTypeExt pLinkExt = (BPELPartnerLinkTypeExt)theElement;
// Fetch the name of the partnerLinkType
String name = pLinkExt.getName();
QName qName = new QName( WSDLDefinition.getTargetNamespace(), name );
BPELPartnerLinkTypeElement pLinkElement = new BPELPartnerLinkTypeElement( qName );
// The partnerLinkType must have one and may have 2 role child elements
int count = 0;
for( int i = 0; i < 2; i++ ) {
if(pLinkExt.getRoleName(i) == null ) continue;
PortType pType = WSDLDefinition.getPortType(pLinkExt.getRolePortType(i));
if ( count == 0 ) {
pLinkElement.setRole1(pLinkExt.getRoleName(i),
pLinkExt.getRolePortType(i),
pType );
count++;
} else if (count == 1) {
pLinkElement.setRole2(pLinkExt.getRoleName(i),
pLinkExt.getRolePortType(i),
pType );
count++;
} else {
break;
} // end if
} // end for
if( count == 0 ) {
error("PartnerLinkTypeNoRoles", theElement, pLinkElement.getName());
throw new ContributionResolveException( "partnerLinkType " +
pLinkElement.getName() +" has no Roles defined" );
} else
thePLinks.add( pLinkElement );
} // end if
} // end for
} // end for
return thePLinks;
List<BPELPartnerLinkTypeElement> thePLinks = new ArrayList<BPELPartnerLinkTypeElement>();
// We must find the partner link type elements from amongst the imported
// WSDLs
for (BPELImportElement theImport : theImports) {
WSDLDefinition theWSDL = theImport.getWSDLDefinition();
Definition WSDLDefinition = theWSDL.getDefinition();
// The BPEL partnerLinkType elements are extension elements within
// the WSDL
List<ExtensibilityElement> extensibilityElements = WSDLDefinition.getExtensibilityElements();
for (ExtensibilityElement theElement : extensibilityElements) {
QName elementType = theElement.getElementType();
if (elementType.equals(LINKTYPE_ELEMENT)) {
BPELPartnerLinkTypeExt pLinkExt = (BPELPartnerLinkTypeExt)theElement;
// Fetch the name of the partnerLinkType
String name = pLinkExt.getName();
QName qName = new QName(WSDLDefinition.getTargetNamespace(), name);
BPELPartnerLinkTypeElement pLinkElement = new BPELPartnerLinkTypeElement(qName);
// The partnerLinkType must have one and may have 2 role
// child elements
int count = 0;
for (int i = 0; i < 2; i++) {
if (pLinkExt.getRoleName(i) == null)
continue;
PortType pType = WSDLDefinition.getPortType(pLinkExt.getRolePortType(i));
if (count == 0) {
pLinkElement.setRole1(pLinkExt.getRoleName(i), pLinkExt.getRolePortType(i), pType);
count++;
} else if (count == 1) {
pLinkElement.setRole2(pLinkExt.getRoleName(i), pLinkExt.getRolePortType(i), pType);
count++;
} else {
break;
} // end if
} // end for
if (count == 0) {
error("PartnerLinkTypeNoRoles", theElement, pLinkElement.getName());
throw new ContributionResolveException("partnerLinkType " + pLinkElement.getName() + " has no Roles defined");
} else
thePLinks.add(pLinkElement);
} // end if
} // end for
} // end for
return thePLinks;
} // end getPartnerLinkTypes
protected Collection<PortType> getAllPortTypes( List<BPELImportElement> theImports,
Collection<WSDLInterface> theInterfaces,
ModelResolver resolver)
throws ContributionResolveException {
Collection<PortType> thePortTypes = (Collection<PortType>)new ArrayList<PortType>();
for ( BPELImportElement theImport : theImports ){
WSDLDefinition theWSDL = theImport.getWSDLDefinition();
Definition wsdlDefinition = theWSDL.getDefinition();
Collection<PortType> portTypes = (Collection<PortType>)wsdlDefinition.getPortTypes().values();
thePortTypes.addAll( portTypes );
// Create WSDLInterface elements for each PortType found
for( PortType portType : portTypes ) {
WSDLObject<PortType> wsdlPortType = theWSDL.getWSDLObject(PortType.class, portType.getQName() );
WSDLInterface wsdlInterface;
if (wsdlPortType != null) {
/**
* Returns all the portTypes referenced by the process.
*
* @param theImports
* @param theInterfaces
* @param resolver
* @return
* @throws ContributionResolveException
*/
private Collection<PortType> getAllPortTypes(List<BPELImportElement> theImports,
Collection<WSDLInterface> theInterfaces, ModelResolver resolver) throws ContributionResolveException {
Collection<PortType> thePortTypes = (Collection<PortType>)new ArrayList<PortType>();
for (BPELImportElement theImport : theImports) {
WSDLDefinition theWSDL = theImport.getWSDLDefinition();
Definition wsdlDefinition = theWSDL.getDefinition();
Collection<PortType> portTypes = (Collection<PortType>)wsdlDefinition.getPortTypes().values();
thePortTypes.addAll(portTypes);
// Create WSDLInterface elements for each PortType found
for (PortType portType : portTypes) {
WSDLObject<PortType> wsdlPortType = theWSDL.getWSDLObject(PortType.class, portType.getQName());
WSDLInterface wsdlInterface;
if (wsdlPortType != null) {
// Introspect the WSDL portType and add the resulting
// WSDLInterface to the resolver
try {
theWSDL.setDefinition( wsdlPortType.getDefinition() );
wsdlInterface = WSDLfactory.createWSDLInterface(wsdlPortType.getElement(),
theWSDL, resolver);
theWSDL.setDefinition(wsdlPortType.getDefinition());
wsdlInterface = WSDLfactory.createWSDLInterface(wsdlPortType.getElement(), theWSDL, resolver);
wsdlInterface.setWsdlDefinition(theWSDL);
} catch (InvalidInterfaceException e) {
ContributionResolveException ce = new ContributionResolveException(e);
error("ContributionResolveException", resolver, ce);
ContributionResolveException ce = new ContributionResolveException(e);
error("ContributionResolveException", resolver, ce);
throw ce;
} // end try
resolver.addModel(wsdlInterface);
theInterfaces.add(wsdlInterface);
} // end if
} // end for
//-----------------------
} // end for
return thePortTypes;
// -----------------------
} // end for
return thePortTypes;
} // end getAllPortTypes
/**
* Returns a QName from a string.
* @param definition - a WSDL Definition
* @param value - the String from which to form the QName in the form "pref:localName"
* @return
*/
protected QName getQNameValue(Definition definition, String value) {
if (value != null && definition != null) {
int index = value.indexOf(':');
String prefix = index == -1 ? "" : value.substring(0, index);
String localName = index == -1 ? value : value.substring(index + 1);
String ns = definition.getNamespace(prefix);
if (ns == null) {
ns = "";
}
return new QName(ns, localName, prefix);
} else {
return null;
}
} // end getQNameValue
/*
* Method which finds a partnerLinkType definition within the WSDLs imported by the BPEL
* Finds a partnerLinkType definition within the WSDLs imported by the BPEL
* process.
*
* @param partnerLinkTypeName - the name of the partnerLinkType
* @param theImports a list of the WSDL import declarations
* @returns a BPELPartnerLinkTypeElement for the partnerLinkType or null if it cannot be
* @return a BPELPartnerLinkTypeElement for the partnerLinkType or null if it cannot be
* found
*/
private BPELPartnerLinkTypeElement findPartnerLinkType( QName partnerLinkTypeName,
List<BPELPartnerLinkTypeElement> thePLinkTypes) {
private BPELPartnerLinkTypeElement findPartnerLinkType( QName partnerLinkTypeName,
List<BPELPartnerLinkTypeElement> thePLinkTypes) {
// We must find the partner link type element from amongst the imported WSDLs
for ( BPELPartnerLinkTypeElement thePLinkType : thePLinkTypes ){
if( thePLinkType.getName().equals(partnerLinkTypeName) ) return thePLinkType;
@ -377,9 +308,15 @@ public class BPELDocumentProcessor extends BaseStAXArtifactProcessor implements
return null;
} // end findPartnerLinkType
protected BPELProcessDefinition indexRead2(URL doc) throws Exception {
/**
* Read a process definition.
*
* @param doc
* @return
* @throws Exception
*/
private BPELProcessDefinition readProcessDefinition(URL doc) throws Exception {
BPELProcessDefinition processDefinition = factory.createBPELProcessDefinition();
processDefinition.setUnresolved(true);
processDefinition.setLocation(doc);
@ -388,137 +325,194 @@ public class BPELDocumentProcessor extends BaseStAXArtifactProcessor implements
XMLStreamReader reader = null;
try {
reader = inputFactory.createXMLStreamReader(is);
/*
* The principle here is to look for partnerLink elements, which form either services
* or references. A partnerLink can be EITHER - the algorithm for deciding is:
* 1) Explicit marking with sca:reference or sca:service attribute
* 2) "first use" of the partnerLink by specific BPEL activity elements:
* <onEvent../>, <receive../> or <pick../> elements imply a service
* <invoke../> implies a reference
* The principle here is to look for partnerLink elements, which
* form either services or references. A partnerLink can be EITHER -
* the algorithm for deciding is: 1) Explicit marking with
* sca:reference or sca:service attribute 2) "first use" of the
* partnerLink by specific BPEL activity elements: <onEvent../>,
* <receive../> or <pick../> elements imply a service <invoke../>
* implies a reference
*/
// TODO - need to handle <scope../> elements as kind of "nested" processes
// - and scopes introduce the possibility of partnerLinks with the same name at
// different levels of scope.... (yuk!!)
// - and scopes introduce the possibility of partnerLinks with the
// same name at different levels of scope.... (yuk!!)
boolean completed = false;
while (!completed) {
switch (reader.next()) {
case START_ELEMENT:
QName qname = reader.getName();
//System.out.println("BPEL TypeLoader - found element with name: " + qname.toString());
if (BPEL_PROCESS_DEFINITION.equals(qname) ||
BPEL_EXECUTABLE_DEFINITION.equals(qname)) {
QName processName = new QName(getString(reader, org.apache.tuscany.sca.assembly.xml.Constants.TARGET_NAMESPACE),
getString(reader, NAME_ELEMENT));
if (BPEL_PROCESS_DEFINITION.equals(qname) || BPEL_EXECUTABLE_DEFINITION.equals(qname)) {
QName processName = new QName(getString(reader, org.apache.tuscany.sca.assembly.xml.Constants.TARGET_NAMESPACE), getString(reader, NAME_ELEMENT));
processDefinition.setName(processName);
} else if (PARTNERLINK_ELEMENT.equals(qname)) {
processDefinition.getPartnerLinks().add(processPartnerLinkElement( reader ));
} else if (ONEVENT_ELEMENT.equals(qname) ||
RECEIVE_ELEMENT.equals(qname) ||
ONMESSAGE_ELEMENT.equals(qname) ) {
processPartnerLinkAsService( reader.getAttributeValue(null, "partnerLink"), processDefinition.getPartnerLinks() );
} else if (INVOKE_ELEMENT.equals(qname)) {
processPartnerLinkAsReference( reader.getAttributeValue(null, "partnerLink"), processDefinition.getPartnerLinks() );
} else if (PARTNERLINK_ELEMENT.equals(qname)) {
processDefinition.getPartnerLinks().add(processPartnerLinkElement(reader));
} else if (ONEVENT_ELEMENT.equals(qname) || RECEIVE_ELEMENT.equals(qname) || ONMESSAGE_ELEMENT.equals(qname)) {
processPartnerLinkAsService(reader.getAttributeValue(null, "partnerLink"), processDefinition.getPartnerLinks());
} else if (INVOKE_ELEMENT.equals(qname)) {
processPartnerLinkAsReference(reader.getAttributeValue(null, "partnerLink"), processDefinition.getPartnerLinks());
} else if (IMPORT_ELEMENT.equals(qname)) {
processDefinition.getImports().add( processImportElement( reader ) );
processDefinition.getImports().add(processImportElement(reader));
} // end if
break;
case END_ELEMENT:
if (PROCESS_ELEMENT.equals(reader.getName())) {
//System.out.println("BPEL TypeLoader - finished read of process file");
completed = true;
break;
} // end if
} // end switch
} // end while
} finally {
if(reader != null) reader.close();
if (reader != null)
reader.close();
is.close();
} // end try
return processDefinition;
} // end indexRead2
} // end readProcessDefinition
/*
* Processes a partnerLink element from the BPEL process and creates a
* BPELPartnerLink object
*/
private BPELPartnerLinkElement processPartnerLinkElement( XMLStreamReader reader )
throws ContributionReadException {
BPELPartnerLinkElement partnerLink = new BPELPartnerLinkElement(
reader.getAttributeValue(null, "name"),
getQNameValue(reader, reader.getAttributeValue(null, "partnerLinkType") ),
reader.getAttributeValue(null, "myRole"),
reader.getAttributeValue(null, "partnerRole"));
// See if there are any SCA extension attributes
String scaService = reader.getAttributeValue( SCA_BPEL_NS, "service");
String scaReference = reader.getAttributeValue( SCA_BPEL_NS, "reference");
if( (scaService != null) && (scaReference != null) ) {
// It is incorrect to set both service & reference attributes
error("PartnerLinkHasBothAttr", partnerLink, reader.getAttributeValue(null, "name"));
throw new ContributionReadException( "BPEL PartnerLink "
+ reader.getAttributeValue(null, "name") +
" has both sca:reference and sca:service attributes set" );
}
// Set the SCA type and the related name, if present
if( scaService != null ) partnerLink.setAsService( scaService );
else if ( scaReference != null ) partnerLink.setAsReference( scaReference );
return partnerLink;
} // end processPartnerLinkElement
/**
* Processes a partnerLink element from the BPEL process and creates a
* BPELPartnerLink object
*
* @param reader
*/
private BPELPartnerLinkElement processPartnerLinkElement(XMLStreamReader reader) throws ContributionReadException {
BPELPartnerLinkElement partnerLink = new BPELPartnerLinkElement(
reader.getAttributeValue(null, "name"),
getQNameValue(reader, reader.getAttributeValue(null, "partnerLinkType")),
reader.getAttributeValue(null, "myRole"),
reader.getAttributeValue(null, "partnerRole"));
// See if there are any SCA extension attributes
String scaService = reader.getAttributeValue(SCA_BPEL_NS, "service");
String scaReference = reader.getAttributeValue(SCA_BPEL_NS, "reference");
if ((scaService != null) && (scaReference != null)) {
// It is incorrect to set both service & reference attributes
error("PartnerLinkHasBothAttr", partnerLink, reader.getAttributeValue(null, "name"));
throw new ContributionReadException("BPEL PartnerLink " + reader.getAttributeValue(null, "name") + " has both sca:reference and sca:service attributes set");
}
// Set the SCA type and the related name, if present
if (scaService != null)
partnerLink.setAsService(scaService);
else if (scaReference != null)
partnerLink.setAsReference(scaReference);
return partnerLink;
} // end processPartnerLinkElement
/*
* Processes an <import../> element from the BPEL process and creates a
* BPELImportElement object
*/
private BPELImportElement processImportElement( XMLStreamReader reader ) {
return ( new BPELImportElement( reader.getAttributeValue(null, "location"),
reader.getAttributeValue(null, "importType"),
reader.getAttributeValue(null, "namespace") ));
} // end processImportElement
/**
* Processes an <import../> element from the BPEL process and creates a
* BPELImportElement object
*
* @param reader
*/
private BPELImportElement processImportElement(XMLStreamReader reader) {
return (new BPELImportElement(reader.getAttributeValue(null, "location"),
reader.getAttributeValue(null, "importType"),
reader.getAttributeValue(null, "namespace")));
} // end processImportElement
/*
* Mark a named partnerLink as a Service, unless it is already marked as a Reference
*/
private void processPartnerLinkAsService( String partnerLinkName,
List<BPELPartnerLinkElement> partnerLinks ) {
BPELPartnerLinkElement partnerLink = findPartnerLinkByName( partnerLinks, partnerLinkName );
if( partnerLink == null ) {
warning("ReferencePartnerLinkNotInList", partnerLinkName, partnerLinkName);
} else {
// Set the type of the partnerLink to "service" if not already set...
if( !partnerLink.isSCATyped() ) partnerLink.setAsService( partnerLinkName );
} // endif
} // end processPartnerLinkAsReference
/**
* Mark a named partnerLink as a Service, unless it is already marked as a
* Reference
*
* @param partnerLinkName
* @param partnerLinks
*/
private void processPartnerLinkAsService(String partnerLinkName, List<BPELPartnerLinkElement> partnerLinks) {
BPELPartnerLinkElement partnerLink = findPartnerLinkByName(partnerLinks, partnerLinkName);
if (partnerLink == null) {
warning("ReferencePartnerLinkNotInList", partnerLinkName, partnerLinkName);
} else {
// Set the type of the partnerLink to "service" if not already
// set...
if (!partnerLink.isSCATyped())
partnerLink.setAsService(partnerLinkName);
} // endif
} // end processPartnerLinkAsReference
/*
* Mark a named partnerLink as a Reference, unless it is already marked as a Service
*/
private void processPartnerLinkAsReference( String partnerLinkName,
List<BPELPartnerLinkElement> partnerLinks ) {
BPELPartnerLinkElement partnerLink = findPartnerLinkByName( partnerLinks, partnerLinkName );
if( partnerLink == null ) {
warning("ReferencePartnerLinkNotInList", partnerLinkName, partnerLinkName);
} else {
// Set the type of the partnerLink to "service" if not already set...
if( !partnerLink.isSCATyped() ) partnerLink.setAsReference( partnerLinkName );
} // endif
} // end processPartnerLinkAsReference
/**
* Mark a named partnerLink as a Reference, unless it is already marked as a
* Service
*
* @param partnerLinkName
* @param partnerLinks
*/
private void processPartnerLinkAsReference(String partnerLinkName, List<BPELPartnerLinkElement> partnerLinks) {
BPELPartnerLinkElement partnerLink = findPartnerLinkByName(partnerLinks, partnerLinkName);
if (partnerLink == null) {
warning("ReferencePartnerLinkNotInList", partnerLinkName, partnerLinkName);
} else {
// Set the type of the partnerLink to "service" if not already
// set...
if (!partnerLink.isSCATyped())
partnerLink.setAsReference(partnerLinkName);
} // endif
} // end processPartnerLinkAsReference
/*
* Finds a PartnerLink by name from a List of PartnerLinks
*
* returns null if there is no partnerLink with a matching name
* - returns the PartnerLink with a matching name
*/
private BPELPartnerLinkElement findPartnerLinkByName( List<BPELPartnerLinkElement> partnerLinks,
String partnerLinkName ) {
// Scan the list looking for a partner link with the supplied name
Iterator<BPELPartnerLinkElement> it = partnerLinks.iterator();
while( it.hasNext() ) {
BPELPartnerLinkElement thePartnerLink = it.next();
if( thePartnerLink.getName().equals(partnerLinkName) ) return thePartnerLink;
}
return null;
} // end method findPartnerLinkByName
/**
* Finds a PartnerLink by name from a List of PartnerLinks returns null if
* there is no partnerLink with a matching name - returns the PartnerLink
* with a matching name
*
* @param partnerLinks
* @param partnerLinkName
*/
private BPELPartnerLinkElement findPartnerLinkByName(List<BPELPartnerLinkElement> partnerLinks, String partnerLinkName) {
// Scan the list looking for a partner link with the supplied name
Iterator<BPELPartnerLinkElement> it = partnerLinks.iterator();
while (it.hasNext()) {
BPELPartnerLinkElement thePartnerLink = it.next();
if (thePartnerLink.getName().equals(partnerLinkName))
return thePartnerLink;
}
return null;
} // end method findPartnerLinkByName
/**
* Report a warning.
*
* @param problems
* @param message
* @param model
*/
private void warning(String message, Object model, Object... messageParameters) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.WARNING, model, message, (Object[])messageParameters);
monitor.problem(problem);
}
}
/**
* Report a error.
*
* @param problems
* @param message
* @param model
*/
private void error(String message, Object model, Object... messageParameters) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
monitor.problem(problem);
}
}
/**
* Report a exception.
*
* @param problems
* @param message
* @param model
*/
private void error(String message, Object model, Exception ex) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.ERROR, model, message, ex);
monitor.problem(problem);
}
}
}

View file

@ -23,7 +23,6 @@ import java.util.List;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.ComponentType;
import org.apache.tuscany.sca.assembly.ConstrainingType;
import org.apache.tuscany.sca.assembly.Property;
@ -32,7 +31,6 @@ import org.apache.tuscany.sca.assembly.Service;
import org.apache.tuscany.sca.assembly.impl.ImplementationImpl;
import org.apache.tuscany.sca.implementation.bpel.BPELImplementation;
import org.apache.tuscany.sca.implementation.bpel.BPELProcessDefinition;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
/**
* The model representing a BPEL implementation in an SCA assembly model.
@ -41,32 +39,30 @@ import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
*/
public class BPELImplementationImpl extends ImplementationImpl implements BPELImplementation {
private QName _processName;
private BPELProcessDefinition _processDefinition;
private QName processName;
private BPELProcessDefinition processDefinition;
private ComponentType componentType;
/**
* Constructs a new BPEL implementation.
*/
public BPELImplementationImpl(AssemblyFactory assemblyFactory,
WSDLFactory wsdlFactory) {
public BPELImplementationImpl() {
}
public QName getProcess() {
return _processName;
return processName;
}
public void setProcess(QName processName) {
_processName = processName;
this.processName = processName;
}
public BPELProcessDefinition getProcessDefinition() {
return this._processDefinition;
return this.processDefinition;
}
public void setProcessDefinition(BPELProcessDefinition processDefinition) {
this._processDefinition = processDefinition;
this.processDefinition = processDefinition;
}
@Override

View file

@ -86,20 +86,6 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
this.monitor = monitor;
}
/**
* Report a error.
*
* @param problems
* @param message
* @param model
*/
private void error(String message, Object model, Object... messageParameters) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
monitor.problem(problem);
}
}
public QName getArtifactType() {
// Returns the QName of the XML element processed by this processor
return IMPLEMENTATION_BPEL_QNAME;
@ -137,43 +123,29 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
return implementation;
}
public void resolve(BPELImplementation impl, ModelResolver resolver) throws ContributionResolveException {
public void resolve(BPELImplementation implementation, ModelResolver resolver) throws ContributionResolveException {
if( impl != null && impl.isUnresolved())
if( implementation != null && implementation.isUnresolved())
{
BPELProcessDefinition processDefinition = resolveBPELProcessDefinition(impl, resolver);
BPELProcessDefinition processDefinition = resolveBPELProcessDefinition(implementation, resolver);
if(processDefinition.isUnresolved()) {
error("BPELProcessNotFound", impl, processDefinition.getName());
//throw new ContributionResolveException("Can't find BPEL Process : " + processDefinition.getName());
error("BPELProcessNotFound", implementation, processDefinition.getName());
} else {
impl.setProcessDefinition(processDefinition);
implementation.setProcessDefinition(processDefinition);
// Get the component type from the process definition
generateComponentType( impl );
generateComponentType( implementation );
//resolve component type
mergeComponentType(resolver, impl);
mergeComponentType(resolver, implementation);
//set current implementation resolved
impl.setUnresolved(false);
implementation.setUnresolved(false);
}
}
} // end resolve
/*
* Write out the XML representation of the BPEL implementation
* <implementation.bpel process="..." />
*
* One complexity here is that the value of the process attribute is a QName
* In this implementation, the QName is written out in XML Namespaces recommendation format,
* as described in the documentation of the getAttributeValueNS method:
*
* ie: {http://example.com/somenamespace}SomeName
*
* This may well NOT be the format in which the attribute was originally read from the
* composite file.
*/
public void write( BPELImplementation bpelImplementation,
XMLStreamWriter writer ) throws ContributionWriteException, XMLStreamException {
//FIXME Deal with policy processing...
@ -199,43 +171,40 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
return resolver.resolveModel(BPELProcessDefinition.class, processDefinition);
} // end resolveBPELProcessDefinition
// Calculates the component type of the supplied implementation and attaches it to the
// implementation
private void generateComponentType(BPELImplementation impl )
throws ContributionResolveException {
/**
* Calculates the component type of the supplied implementation and attaches it to the
* implementation.
*
* @param impl
* @throws ContributionResolveException
*/
private void generateComponentType(BPELImplementation impl) throws ContributionResolveException {
// Create a ComponentType and mark it unresolved
ComponentType componentType = assemblyFactory.createComponentType();
componentType.setUnresolved(true);
impl.setComponentType(componentType);
// Each partner link in the process represents either a service or a reference
// Each partner link in the process represents either a service or a
// reference
// - or both, in the sense of involving a callback
BPELProcessDefinition theProcess = impl.getProcessDefinition();
List<BPELPartnerLinkElement> partnerLinks = theProcess.getPartnerLinks();
for( BPELPartnerLinkElement pLink : partnerLinks ) {
// check that the partner link has been designated as service or reference in SCA terms
if ( pLink.isSCATyped() ) {
String SCAName = pLink.getSCAName();
if( pLink.querySCAType().equals("reference") ) {
componentType.getReferences().add(
generateReference( SCAName,
pLink.getMyRolePortType(),
pLink.getPartnerRolePortType(),
theProcess.getInterfaces() )
);
} else {
componentType.getServices().add(
generateService( SCAName,
pLink.getMyRolePortType(),
pLink.getPartnerRolePortType(),
theProcess.getInterfaces() )
);
} // end if
} // end if
for (BPELPartnerLinkElement pLink : partnerLinks) {
// check that the partner link has been designated as service or
// reference in SCA terms
if (pLink.isSCATyped()) {
String SCAName = pLink.getSCAName();
if (pLink.querySCAType().equals("reference")) {
componentType.getReferences().add(generateReference(SCAName, pLink.getMyRolePortType(), pLink.getPartnerRolePortType(), theProcess.getInterfaces()));
} else {
componentType.getServices().add(generateService(SCAName, pLink.getMyRolePortType(), pLink.getPartnerRolePortType(), theProcess.getInterfaces()));
} // end if
} // end if
} // end for
} // end getComponentType
/**
@ -247,70 +216,69 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
* @return
*/
private Reference generateReference( String name, PortType myRolePT,
PortType partnerRolePT, Collection<WSDLInterface> theInterfaces )
throws ContributionResolveException {
PortType partnerRolePT, Collection<WSDLInterface> theInterfaces) throws ContributionResolveException {
Reference reference = assemblyFactory.createReference();
WSDLInterfaceContract interfaceContract = wsdlFactory.createWSDLInterfaceContract();
reference.setInterfaceContract(interfaceContract);
// Establish whether there is just a call interface or a call + callback interface
// Establish whether there is just a call interface or a call + callback
// interface
PortType callPT = null;
PortType callbackPT = null;
if( myRolePT != null ) {
callPT = myRolePT;
// If the 2 port types are not the same one, there is a callback...
if( partnerRolePT != null ) {
if( !myRolePT.getQName().equals(partnerRolePT.getQName()) ){
callbackPT = partnerRolePT;
} // end if
} // end if
} else if ( partnerRolePT != null ) {
callPT = partnerRolePT;
if (myRolePT != null) {
callPT = myRolePT;
// If the 2 port types are not the same one, there is a callback...
if (partnerRolePT != null) {
if (!myRolePT.getQName().equals(partnerRolePT.getQName())) {
callbackPT = partnerRolePT;
} // end if
} // end if
} else if (partnerRolePT != null) {
callPT = partnerRolePT;
} // end if
// No interfaces mean an error - throw an exception
if( callPT == null && callbackPT == null ) {
error("MyRolePartnerRoleNull", theInterfaces);
throw new ContributionResolveException("Error: myRole and partnerRole port types are both null");
} // end if
// Set the name of the reference to the supplied name and the multiplicity of the reference
// to 1..1
// TODO: support other multiplicities
// No interfaces mean an error
if (callPT == null && callbackPT == null) {
error("MyRolePartnerRoleNull", theInterfaces);
} // end if
// Set the name of the reference to the supplied name and the
// multiplicity of the reference
// to 1..1
// TODO: support other multiplicities
reference.setName(name);
reference.setMultiplicity(Multiplicity.ONE_ONE);
if ( callPT != null ) {
if (callPT != null) {
// Set the call interface and, if present, the callback interface
WSDLInterface callInterface = null;
for( WSDLInterface anInterface : theInterfaces ) {
if( anInterface.getPortType().getQName().equals(callPT.getQName())) callInterface = anInterface;
for (WSDLInterface anInterface : theInterfaces) {
if (anInterface.getPortType().getQName().equals(callPT.getQName()))
callInterface = anInterface;
} // end for
// Throw an exception if no interface is found
if( callInterface == null ) {
error("NoInterfaceForPortType", theInterfaces, callPT.getQName().toString());
throw new ContributionResolveException("Interface not found for port type " +
callPT.getQName().toString() );
if (callInterface == null) {
error("NoInterfaceForPortType", theInterfaces, callPT.getQName().toString());
} else
reference.getInterfaceContract().setInterface(callInterface);
}
// There is a callback if the partner role is not null and if the partner role port type
// There is a callback if the partner role is not null and if the
// partner role port type
// is not the same as the port type for my role
if ( callbackPT != null ) {
if (callbackPT != null) {
WSDLInterface callbackInterface = null;
for( WSDLInterface anInterface : theInterfaces ) {
if( anInterface.getPortType().getQName().equals(callbackPT.getQName())) callbackInterface = anInterface;
for (WSDLInterface anInterface : theInterfaces) {
if (anInterface.getPortType().getQName().equals(callbackPT.getQName()))
callbackInterface = anInterface;
} // end for
// Throw an exception if no interface is found
if( callbackInterface == null ) {
error("NoInterfaceForPortType", theInterfaces, callbackPT.getQName().toString());
throw new ContributionResolveException("Interface not found for port type " +
callbackPT.getQName().toString() );
} else
if (callbackInterface == null) {
error("NoInterfaceForPortType", theInterfaces, callbackPT.getQName().toString());
} else
reference.getInterfaceContract().setCallbackInterface(callbackInterface);
} // end if
return reference;
return reference;
} // end generateReference
/**
@ -327,62 +295,60 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
Service service = assemblyFactory.createService();
WSDLInterfaceContract interfaceContract = wsdlFactory.createWSDLInterfaceContract();
service.setInterfaceContract(interfaceContract);
// Set the name of the service to the supplied name
// Set the name of the service to the supplied name
service.setName(name);
// Establish whether there is just a call interface or a call + callback interface
// Establish whether there is just a call interface or a call + callback
// interface
PortType callPT = null;
PortType callbackPT = null;
if( myRolePT != null ) {
callPT = myRolePT;
// If the 2 port types are not the same one, there is a callback...
if( partnerRolePT != null ) {
if( !myRolePT.getQName().equals(partnerRolePT.getQName()) ){
callbackPT = partnerRolePT;
} // end if
} // end if
} else if ( partnerRolePT != null ) {
callPT = partnerRolePT;
} // end if
// No interfaces mean an error - throw an exception
if( callPT == null && callbackPT == null ) {
error("MyRolePartnerRoleNull", theInterfaces);
throw new ContributionResolveException("Error: myRole and partnerRole port types are both null");
if (myRolePT != null) {
callPT = myRolePT;
// If the 2 port types are not the same one, there is a callback...
if (partnerRolePT != null) {
if (!myRolePT.getQName().equals(partnerRolePT.getQName())) {
callbackPT = partnerRolePT;
} // end if
} // end if
} else if (partnerRolePT != null) {
callPT = partnerRolePT;
} // end if
if ( callPT != null ) {
// No interfaces mean an error
if (callPT == null && callbackPT == null) {
error("MyRolePartnerRoleNull", theInterfaces);
} // end if
if (callPT != null) {
// Set the call interface and, if present, the callback interface
WSDLInterface callInterface = null;
for( WSDLInterface anInterface : theInterfaces ) {
if( anInterface.getPortType().getQName().equals(callPT.getQName())) callInterface = anInterface;
for (WSDLInterface anInterface : theInterfaces) {
if (anInterface.getPortType().getQName().equals(callPT.getQName()))
callInterface = anInterface;
} // end for
// Throw an exception if no interface is found
if( callInterface == null ) {
error("NoInterfaceForPortType", theInterfaces, callPT.getQName().toString());
throw new ContributionResolveException("Interface not found for port type " +
callPT.getQName().toString() );
if (callInterface == null) {
error("NoInterfaceForPortType", theInterfaces, callPT.getQName().toString());
} else
service.getInterfaceContract().setInterface(callInterface);
} // end if
// There is a callback if the partner role is not null and if the partner role port type
// There is a callback if the partner role is not null and if the
// partner role port type
// is not the same as the port type for my role
if ( callbackPT != null ) {
if (callbackPT != null) {
WSDLInterface callbackInterface = null;
for( WSDLInterface anInterface : theInterfaces ) {
if( anInterface.getPortType().getQName().equals(callbackPT.getQName())) callbackInterface = anInterface;
for (WSDLInterface anInterface : theInterfaces) {
if (anInterface.getPortType().getQName().equals(callbackPT.getQName()))
callbackInterface = anInterface;
} // end for
// Throw an exception if no interface is found
if( callbackInterface == null ) {
error("NoInterfaceForPortType", theInterfaces, callbackPT.getQName().toString());
throw new ContributionResolveException("Interface not found for port type " +
callbackPT.getQName().toString() );
} else
if (callbackInterface == null) {
error("NoInterfaceForPortType", theInterfaces, callbackPT.getQName().toString());
} else
service.getInterfaceContract().setCallbackInterface(callbackInterface);
} // end if
return service;
return service;
} // end generateService
/**
@ -395,26 +361,30 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
* @param impl
*/
private void mergeComponentType(ModelResolver resolver, BPELImplementation impl) {
// Load the component type from a component type file, if any
// Load the component type from a component type file, if any
ComponentType componentType = getComponentType(resolver, impl);
if (componentType != null && !componentType.isUnresolved()) {
// References...
// References...
Map<String, Reference> refMap = new HashMap<String, Reference>();
for (Reference reference : componentType.getReferences()) {
reference.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME);
reference.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME);
refMap.put(reference.getName(), reference);
} // end for
// For the present, overwrite anything arising from the component type sidefile if
// For the present, overwrite anything arising from the component
// type sidefile if
// equivalent services are defined in the implementation.
// TODO - a more careful merge must be done, using the implementation introspection data
// as the master but adding any additional and non-conflicting information from the
// TODO - a more careful merge must be done, using the
// implementation introspection data
// as the master but adding any additional and non-conflicting
// information from the
// sidefile
for (Reference ref : impl.getReferences()) {
ref.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME);
ref.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME);
refMap.put(ref.getName(), ref);
} // end for
} // end for
impl.getReferences().clear();
impl.getReferences().addAll(refMap.values());
@ -422,18 +392,21 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
// Services.....
Map<String, Service> serviceMap = new HashMap<String, Service>();
for (Service service : componentType.getServices()) {
service.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME);
service.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME);
serviceMap.put(service.getName(), service);
} // end for
// For the present, overwrite anything arising from the component type sidefile if
// For the present, overwrite anything arising from the component
// type sidefile if
// equivalent services are defined in the implementation.
// TODO - a more careful merge must be done, using the implementation introspection data
// as the master but adding any additional and non-conflicting information from the
// TODO - a more careful merge must be done, using the
// implementation introspection data
// as the master but adding any additional and non-conflicting
// information from the
// sidefile
for (Service svc : impl.getServices()) {
svc.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME);
serviceMap.put(svc.getName(), svc);
serviceMap.put(svc.getName(), svc);
} // end for
impl.getServices().clear();
@ -442,10 +415,11 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
// Properties
Map<String, Property> propMap = new HashMap<String, Property>();
for (Property property : componentType.getProperties()) {
propMap.put(property.getName(), property);
propMap.put(property.getName(), property);
} // end for
// A simple overwrite of any equivalent properties from the component type sidefile
// A simple overwrite of any equivalent properties from the
// component type sidefile
for (Property prop : impl.getProperties()) {
propMap.put(prop.getName(), prop);
}
@ -495,44 +469,54 @@ public class BPELImplementationProcessor extends BaseStAXArtifactProcessor imple
private QName getAttributeValueNS(XMLStreamReader reader, String attribute) {
String fullValue = reader.getAttributeValue(null, attribute);
if (fullValue == null) {
error("AttributeProcessMissing", reader);
return null;
error("AttributeProcessMissing", reader);
return null;
}
// Deal with the attribute in the XML Namespaces recommendation format
// - trim off any leading/trailing spaces and check that the first character is '{'
if( fullValue.trim().charAt(0) == '{' ) {
try {
// Attempt conversion to a QName object
QName theProcess = QName.valueOf( fullValue );
return theProcess;
} catch ( IllegalArgumentException e ) {
// This exception happens if the attribute begins with '{' but doesn't conform
// to the XML Namespaces recommendation format
error("AttributeWithoutNamespace", reader, attribute, fullValue);
return null;
//throw new BPELProcessException("Attribute " + attribute + " with value " + fullValue +
//" in your composite should be of the form {namespaceURI}localname");
}
// - trim off any leading/trailing spaces and check that the first
// character is '{'
if (fullValue.trim().charAt(0) == '{') {
try {
// Attempt conversion to a QName object
QName theProcess = QName.valueOf(fullValue);
return theProcess;
} catch (IllegalArgumentException e) {
// This exception happens if the attribute begins with '{' but
// doesn't conform
// to the XML Namespaces recommendation format
error("AttributeWithoutNamespace", reader, attribute, fullValue);
return null;
}
} // endif
// Deal with the attribute in the local name + prefix format
if (fullValue.indexOf(":") < 0) {
error("AttributeWithoutPrefix", reader, attribute, fullValue);
return null;
//throw new BPELProcessException("Attribute " + attribute + " with value " + fullValue +
//" in your composite should be prefixed (process=\"prefix:name\").");
error("AttributeWithoutPrefix", reader, attribute, fullValue);
return null;
}
String prefix = fullValue.substring(0, fullValue.indexOf(":"));
String name = fullValue.substring(fullValue.indexOf(":") + 1);
String nsUri = reader.getNamespaceContext().getNamespaceURI(prefix);
if (nsUri == null) {
error("AttributeUnrecognizedNamespace", reader, attribute, fullValue);
return null;
//throw new BPELProcessException("Attribute " + attribute + " with value " + fullValue +
//" in your composite has an unrecognized namespace prefix.");
}
error("AttributeUnrecognizedNamespace", reader, attribute, fullValue);
return null;
}
return new QName(nsUri, name, prefix);
}
/**
* Report a error.
*
* @param problems
* @param message
* @param model
*/
private void error(String message, Object model, Object... messageParameters) {
if (monitor != null) {
Problem problem = new ProblemImpl(this.getClass().getName(), "impl-bpel-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
monitor.problem(problem);
}
}
}

View file

@ -23,16 +23,14 @@ import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Collection;
import javax.xml.namespace.QName;
import javax.wsdl.PortType;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.implementation.bpel.BPELProcessDefinition;
import org.apache.tuscany.sca.implementation.bpel.xml.BPELImportElement;
import org.apache.tuscany.sca.implementation.bpel.xml.BPELPartnerLinkElement;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
/**
* The BPEL process definition implementation.
@ -40,14 +38,14 @@ import org.apache.tuscany.sca.implementation.bpel.xml.BPELPartnerLinkElement;
* @version $Rev$ $Date$
*/
public class BPELProcessDefinitionImpl implements BPELProcessDefinition {
private QName name;
private URI uri;
private URL location;
private QName name;
private URI uri;
private URL location;
private boolean unresolved;
private List<BPELPartnerLinkElement> partnerLinks = new ArrayList<BPELPartnerLinkElement>();
private List<BPELImportElement> imports = new ArrayList<BPELImportElement>();
private Collection<PortType> thePortTypes = null;
private Collection<WSDLInterface> theInterfaces = null;
private List<PortType> thePortTypes = new ArrayList<PortType>();
private List<WSDLInterface> theInterfaces = new ArrayList<WSDLInterface>();
public QName getName() {
return name;
@ -81,65 +79,22 @@ public class BPELProcessDefinitionImpl implements BPELProcessDefinition {
this.unresolved = undefined;
}
/**
* Return the list of PartnerLinks for this process
* @return List<BPELPartnerLinkElement> the list of Partner Links
*/
public List<BPELPartnerLinkElement> getPartnerLinks() {
return partnerLinks;
}
/**
* Return the list of imports for this process
* @return List<BPELImportElement> the list of Import elements
*/
public List<BPELImportElement> getImports() {
return imports;
}
public void setPortTypes( Collection<PortType> thePortTypes ) {
this.thePortTypes = thePortTypes;
}
public Collection<PortType> getPortTypes() {
public List<PortType> getPortTypes() {
return thePortTypes;
}
/**
* Set the associated collection of WSDL interfaces
* @param theInterfaces
*/
public void setInterfaces( Collection<WSDLInterface> theInterfaces ) {
this.theInterfaces = theInterfaces;
} // end setInterfaces
/**
* Return the collection of associated WSDL interfaces
* @return
*/
public Collection<WSDLInterface> getInterfaces() {
public List<WSDLInterface> getInterfaces() {
return theInterfaces;
} // end getInterfaces
public void compile() {
/*
String bpelFile = reader.getAttributeValue(null, "file"); // FIXME:
// Resolving the BPEL file and compiling it
URL bpelURL = getClass().getClassLoader().getResource(bpelFile);
if (bpelURL == null)
throw new ODEProcessException("Couldn't find referenced bpel file " + bpelFile);
BpelC bpelc = BpelC.newBpelCompiler();
ByteArrayOutputStream compiledProcess = new ByteArrayOutputStream();
bpelc.setOutputStream(compiledProcess);
try {
bpelc.compile(new File(bpelURL.getFile()));
} catch (IOException e) {
e.printStackTrace();
}
*/
}
@Override
public int hashCode() {
return String.valueOf(getName()).hashCode();

View file

@ -31,14 +31,12 @@ import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
*/
public class BPELImportElement {
private String location;
private String location;
private String importType;
private String namespace;
private WSDLDefinition theWSDL = null;
public BPELImportElement( String location,
String importType,
String namespace ) {
public BPELImportElement(String location, String importType, String namespace) {
this.location = location;
this.importType = importType;
this.namespace = namespace;
@ -51,17 +49,17 @@ public class BPELImportElement {
public String getLocation() {
return location;
}
public String getNamespace() {
return namespace;
return namespace;
}
public void setWSDLDefinition( WSDLDefinition theDefinition) {
theWSDL = theDefinition;
public void setWSDLDefinition(WSDLDefinition theDefinition) {
theWSDL = theDefinition;
}
public WSDLDefinition getWSDLDefinition() {
return theWSDL;
return theWSDL;
}
} // end class BPELImportElement

View file

@ -40,8 +40,8 @@ public class BPELPartnerLinkElement {
private String REFERENCE_TYPE = "reference";
private String SERVICE_TYPE = "service";
private String name;
private QName partnerLinkType;
private String name;
private QName partnerLinkType;
private BPELPartnerLinkTypeElement pLinkType = null;
private String myRole;
private String partnerRole;
@ -78,15 +78,15 @@ public class BPELPartnerLinkElement {
}
private PortType getRolePortType( String theRole ) {
if( theRole == null || theRole.length() == 0 ) {
return null;
} //end if
if ( theRole.equals( pLinkType.getRole1Name() ) ) {
return pLinkType.getRole1pType();
} else if ( theRole.equals( pLinkType.getRole2Name() ) ) {
return pLinkType.getRole2pType();
} // end if
return null;
if (theRole == null || theRole.length() == 0) {
return null;
} // end if
if (theRole.equals(pLinkType.getRole1Name())) {
return pLinkType.getRole1pType();
} else if (theRole.equals(pLinkType.getRole2Name())) {
return pLinkType.getRole2pType();
} // end if
return null;
} // end getRolePortType
public String getName() {

View file

@ -39,75 +39,74 @@
*/
public class BPELPartnerLinkTypeElement implements ExtensibilityElement {
private QName name;
private String Role1name = null;
private QName Role1porttype = null;
private PortType Role1pType = null;
private String Role2name = null;
private QName Role2porttype = null;
private PortType Role2pType = null;
private QName name;
private String Role1name = null;
private QName Role1porttype = null;
private PortType Role1pType = null;
private String Role2name = null;
private QName Role2porttype = null;
private PortType Role2pType = null;
private QName elementType = null;
private Boolean required = false;
public BPELPartnerLinkTypeElement(QName name) {
this.name = name;
}
public QName getName() {
return name;
}
public void setRole1(String name, QName portType, PortType pType) {
Role1name = name;
Role1porttype = portType;
Role1pType = pType;
}
public void setRole2(String name, QName portType, PortType pType) {
Role2name = name;
Role2porttype = portType;
Role2pType = pType;
}
public String getRole1Name() {
return Role1name;
}
public String getRole2Name() {
return Role2name;
}
public QName getRole1PortType() {
return Role1porttype;
}
public QName getRole2PortType() {
return Role2porttype;
}
public PortType getRole1pType() {
return Role1pType;
}
public PortType getRole2pType() {
return Role2pType;
}
public QName getElementType() {
return elementType;
}
private QName elementType = null;
private Boolean required = false;
public BPELPartnerLinkTypeElement( QName name ) {
this.name = name;
}
public QName getName(){
return name;
}
public void setRole1( String name, QName portType, PortType pType ) {
Role1name = name;
Role1porttype = portType;
Role1pType = pType;
}
public void setRole2( String name, QName portType, PortType pType ) {
Role2name = name;
Role2porttype = portType;
Role2pType = pType;
}
public String getRole1Name() {
return Role1name;
}
public String getRole2Name() {
return Role2name;
}
public QName getRole1PortType() {
return Role1porttype;
}
public QName getRole2PortType() {
return Role2porttype;
}
public PortType getRole1pType() {
return Role1pType;
}
public PortType getRole2pType() {
return Role2pType;
}
public QName getElementType() {
return elementType;
}
public Boolean getRequired() {
return required;
return required;
}
public void setElementType(QName elementType) {
this.elementType = elementType;
this.elementType = elementType;
}
public void setRequired(java.lang.Boolean required) {
this.required = required;
this.required = required;
}
} // end BPELPartnerLinkType

View file

@ -103,12 +103,6 @@ public class BPELImplementationProcessorTestCase extends TestCase {
*/
public void testLoadInvalidComposite() throws Exception {
XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(COMPOSITE_INVALID));
/*try {
staxProcessor.read(reader);
fail("InvalidException should have been thrown");
} catch(Exception e) {
assertTrue(true);
}*/
staxProcessor.read(reader);
Problem problem = ((DefaultMonitorImpl)monitor).getLastLoggedProblem();
assertNotNull(problem);