axisservicebasedmultilanguageemitter.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,546 行 · 第 1/5 页
JAVA
1,546 行
property = axisBindingOperation.getProperty(name);
}
}
if ((property == null) && (axisBinding != null)) {
property = axisBinding.getProperty(name);
}
if (property == null) {
property = WSDL20DefaultValueHolder.getDefaultValue(name);
}
return property;
}
private Object getBindingPropertyFromMessageFault(String name, QName qName, String key) {
Object property = null;
// Get the correct AxisBindingOperation coresponding to the AxisOperation
AxisBindingOperation axisBindingOperation =
(AxisBindingOperation) axisBinding.getChild(qName);
AxisBindingMessage axisBindingMessageFault = null;
AxisBindingMessage axisBindingFault = null;
if (axisBindingOperation != null) {
axisBindingMessageFault = (AxisBindingMessage) axisBindingOperation.getFault(key);
if (axisBindingMessageFault != null) {
property = axisBindingMessageFault.getProperty(name);
}
if (property == null) {
axisBindingFault = axisBinding.getFault(key);
property = axisBindingFault.getProperty(name);
}
}
if (property == null) {
property = WSDL20DefaultValueHolder.getDefaultValue(name);
}
return property;
}
/**
* Update mapper for the stub
*/
protected void updateMapperForStub() {
updateMapperClassnames(getFullyQualifiedStubName());
}
/**
* Returns the fully qualified Stub name reused in many methods
*
* @return classname
*/
protected String getFullyQualifiedStubName() {
String packageName = codeGenConfiguration.getPackageName();
String localPart = null;
if (this.axisService.getEndpoints().size() > 1) {
localPart = makeJavaClassName(axisService.getName() + axisService.getEndpointName());
} else {
localPart = makeJavaClassName(axisService.getName());
}
return packageName + "." + localPart + STUB_SUFFIX;
}
/**
* rests the fault name maps
*/
protected void resetFaultNames() {
fullyQualifiedFaultClassNameMap.clear();
faultClassNameMap.clear();
faultElementQNameMap.clear();
}
/**
* Populate a map of fault class names
*/
protected void generateAndPopulateFaultNames() {
//loop through and find the faults
Iterator operations = axisService.getOperations();
AxisOperation operation;
AxisMessage faultMessage;
while (operations.hasNext()) {
operation = (AxisOperation) operations.next();
ArrayList faultMessages = operation.getFaultMessages();
for (int i = 0; i < faultMessages.size(); i++) {
faultMessage = (AxisMessage) faultMessages.get(i);
//make a unique name and put that in the hashmap
if (!fullyQualifiedFaultClassNameMap.
containsKey(faultMessage.getName())) {
//make a name
String className = makeJavaClassName(faultMessage.getName());
QName faultQName = new QName(codeGenConfiguration.getTargetNamespace(), faultMessage.getName());
if (this.mapper.getQNameToMappingObject(faultQName) != null) {
// i.e we already have an entry
className = makeJavaClassName(className + "Exception" + (uniqueFaultNameCounter++));
}
while (fullyQualifiedFaultClassNameMap.containsValue(className)) {
className = makeJavaClassName(className + (uniqueFaultNameCounter++));
}
fullyQualifiedFaultClassNameMap.put(
faultMessage.getName(),
className);
//we've to keep track of the fault base names seperately
faultClassNameMap.put(faultMessage.getName(),
className);
faultElementQNameMap.put(faultMessage.getName(),
faultMessage.getElementQName());
}
}
}
}
/**
* Emits the stubcode with bindings.
*
* @throws CodeGenerationException
* @see Emitter#emitStub()
*/
public void emitStub() throws CodeGenerationException {
try {
//first keep a seperate copy of the original map to use in
// every iteration
// for every iteration qName2NameMap is changed in updateMapperForStub
// method if in the packing mode
Map originalTypeMap = getNewCopy(mapper.getAllMappedNames());
for (Iterator axisServicesIter = this.axisServices.iterator();
axisServicesIter.hasNext();) {
this.axisService = (AxisService) axisServicesIter.next();
//we have to generate the code for each bininding
//for the moment lets genrate the stub name with the service name and end point name
if (!codeGenConfiguration.isPackClasses()) {
// write the call back handlers
writeCallBackHandlers();
}
Map endpoints = this.axisService.getEndpoints();
for (Iterator endPointsIter = endpoints.values().iterator();
endPointsIter.hasNext();) {
// set the end point details.
this.axisEndpoint = (AxisEndpoint) endPointsIter.next();
this.axisBinding = this.axisEndpoint.getBinding();
axisService.setEndpointName(this.axisEndpoint.getName());
axisService.setBindingName(
this.axisEndpoint.getBinding().getName().getLocalPart());
// see the comment at updateMapperClassnames for details and reasons for
// calling this method
if (mapper.isObjectMappingPresent()) {
// initialize the map to original one
copyMap(originalTypeMap, mapper.getAllMappedNames());
updateMapperForStub();
} else {
copyToFaultMap();
}
//generate and populate the fault names before hand. We need that for
//the smooth opration of the thing
//first reset the fault names and recreate it
resetFaultNames();
generateAndPopulateFaultNames();
updateFaultPackageForStub();
// write the inteface
// feed the binding information also
// note that we do not create this interface if the user switched on the wrap classes mode
// this interface also depends on the binding
if (!codeGenConfiguration.isPackClasses()) {
writeInterface(false);
}
if (codeGenConfiguration.isPackClasses()) {
// write the call back handlers
writeCallBackHandlers();
}
// write the Exceptions
writeExceptions();
// write interface implementations
writeInterfaceImplementation();
// write the test classes
writeTestClasses();
}
}
// save back type map
if (this.mapper.isObjectMappingPresent()) {
copyMap(originalTypeMap, this.mapper.getAllMappedNames());
}
if (!codeGenConfiguration.isSkipBuildXML()) {
// write an ant build file
// Note that ant build is generated only once
// and that has to happen here only if the
// client side code is required
if (!codeGenConfiguration.isGenerateAll()) {
//our logic for the build xml is that it will
//only be written when not flattened
if (!codeGenConfiguration.isFlattenFiles()) {
writeAntBuild();
}
}
}
} catch (CodeGenerationException ce) {
throw ce;
} catch (Exception e) {
throw new CodeGenerationException(e);
}
}
private Map getNewCopy(Map copyFormMap) {
Map copyToMap = new HashMap();
Object key;
for (Iterator iter = copyFormMap.keySet().iterator(); iter.hasNext();) {
key = iter.next();
copyToMap.put(key, copyFormMap.get(key));
}
return copyToMap;
}
private void copyMap(Map copyFormMap, Map copyToMap) {
Object key;
for (Iterator iter = copyFormMap.keySet().iterator(); iter.hasNext();) {
key = iter.next();
copyToMap.put(key, copyFormMap.get(key));
}
}
/**
* Writes the Ant build.
*
* @throws Exception
*/
protected void writeAntBuild() throws Exception {
// Write the service xml in a folder with the
Document skeletonModel = createDOMDocumentForAntBuild();
debugLogDocument("Document for ant build:", skeletonModel);
AntBuildWriter antBuildWriter = new AntBuildWriter(codeGenConfiguration.getOutputLocation(),
codeGenConfiguration.getOutputLanguage());
antBuildWriter.setDatabindingFramework(codeGenConfiguration.getDatabindingType());
antBuildWriter.setOverride(codeGenConfiguration.isOverride());
writeFile(skeletonModel, antBuildWriter);
codeGenConfiguration.addXmlFileName(antBuildWriter.getOutputFile().getAbsolutePath());
}
/**
* Creates the DOM tree for the Ant build. Uses the interface.
*/
protected Document createDOMDocumentForAntBuild() {
Document doc = getEmptyDocument();
Element rootElement = doc.createElement("ant");
String serviceName = makeJavaClassName(axisService.getName());
String packageName = codeGenConfiguration.getPackageName();
String[] dotSeparatedValues = packageName.split("\\.");
addAttribute(doc, "package", dotSeparatedValues[0], rootElement);
addAttribute(doc, "name", serviceName, rootElement);
addAttribute(doc, "servicename", serviceName, rootElement);
addAttribute(doc, "src", codeGenConfiguration.getSourceLocation(), rootElement);
addAttribute(doc, "resource", codeGenConfiguration.getResourceLocation(), rootElement);
if (codeGenConfiguration.getAxisServices().size() > 1){
addAttribute(doc, "artifactname", "Services", rootElement);
} else {
addAttribute(doc, "artifactname", this.axisService.getName() , rootElement);
}
if (!codeGenConfiguration.isWriteTestCase()) {
addAttribute(doc, "testOmit", "true", rootElement);
}
if (codeGenConfiguration.isServerSide()) {
addAttribute(doc,
"isserverside",
"yes",
rootElement);
}
doc.appendChild(rootElement);
//////////////////////////////////////////////////////////
// System.out.println(DOM2Writer.nodeToString(rootElement));
////////////////////////////////////////////////////////////
return doc;
}
/**
* Write the test classes
*/
protected void writeTestClasses() throws Exception {
if (codeGenConfiguration.isWriteTestCase()) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?