00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00040 package org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.writer;
00041
00042 import java.io.IOException;
00043 import java.io.PrintWriter;
00044 import java.util.ArrayList;
00045 import java.util.HashSet;
00046 import java.util.Iterator;
00047 import java.util.List;
00048 import java.util.Map;
00049
00050 import javax.wsdl.Binding;
00051 import javax.wsdl.BindingOperation;
00052 import javax.wsdl.Definition;
00053 import javax.wsdl.Operation;
00054 import javax.wsdl.OperationType;
00055 import javax.wsdl.Port;
00056 import javax.wsdl.Service;
00057 import javax.wsdl.extensions.UnknownExtensibilityElement;
00058 import javax.wsdl.extensions.soap.SOAPBinding;
00059 import javax.xml.namespace.QName;
00060
00061 import org.apache.axis.Constants;
00062 import org.apache.axis.enum.Scope;
00063 import org.apache.axis.enum.Style;
00064 import org.apache.axis.enum.Use;
00065 import org.apache.axis.utils.JavaUtils;
00066 import org.apache.axis.utils.Messages;
00067 import org.apache.axis.wsdl.symbolTable.BindingEntry;
00068 import org.apache.axis.wsdl.symbolTable.Parameters;
00069 import org.apache.axis.wsdl.symbolTable.SymbolTable;
00070 import org.apache.axis.wsdl.toJava.Emitter;
00071 import org.apache.axis.wsdl.toJava.Utils;
00072
00073 import org.objectweb.jonas_lib.deployment.api.HandlerDesc;
00074
00075 import org.objectweb.jonas_ws.deployment.api.PortComponentDesc;
00076 import org.objectweb.jonas_ws.deployment.api.SSBPortComponentDesc;
00077 import org.objectweb.jonas_ws.deployment.api.ServiceDesc;
00078
00084 public class J2EEServerDeployWriter extends JOnASDeployWriter {
00085
00089 private static final String WSDD_PREFIX = "deploy-server-";
00090
00094 private static final String SERVICE_ENDPOINT_INTERFACE_NAME = "serviceEndpointInterfaceName";
00095
00099 private static final String SERVICE_ENDPOINT_JNDI_NAME = "serviceEndpointJndiName";
00100
00107 public J2EEServerDeployWriter(Emitter emitter, Definition definition, SymbolTable symbolTable) {
00108 super(emitter, definition, symbolTable);
00109 }
00110
00116 protected void writeDeployServices(PrintWriter pw) throws IOException {
00117
00118
00119 Map serviceMap = getDefinition().getServices();
00120 ServiceDesc desc = getJonasWSContext().getServiceDesc();
00121
00122 for (Iterator mapIterator = serviceMap.values().iterator(); mapIterator.hasNext();) {
00123 Service myService = (Service) mapIterator.next();
00124
00125 pw.println();
00126 pw.println(" <!-- " + Messages.getMessage("wsdlService00", myService.getQName().getLocalPart()) + " -->");
00127 pw.println();
00128
00129 for (Iterator portIterator = myService.getPorts().values().iterator(); portIterator.hasNext();) {
00130 Port myPort = (Port) portIterator.next();
00131 BindingEntry bEntry = getSymbolTable().getBindingEntry(myPort.getBinding().getQName());
00132
00133
00134 if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) {
00135 continue;
00136 }
00137
00138 PortComponentDesc portDesc = findPortComponentDesc(desc, myPort);
00139
00140 if (portDesc != null) {
00141
00142 writeDeployPort(pw, myService, bEntry, portDesc);
00143 }
00144 }
00145 }
00146 }
00147
00153 private static PortComponentDesc findPortComponentDesc(ServiceDesc desc, Port myPort) {
00154
00155 PortComponentDesc port = null;
00156 List ports = desc.getPortComponents();
00157 for (Iterator i = ports.iterator(); i.hasNext() && port == null;) {
00158 PortComponentDesc pcd = (PortComponentDesc) i.next();
00159 if (pcd.getQName().getLocalPart().equals(myPort.getName())) {
00160 port = pcd;
00161 }
00162 }
00163 return port;
00164 }
00165
00174 protected void writeDeployPort(PrintWriter pw, Service service, BindingEntry bEntry,
00175 PortComponentDesc portComponentDesc) throws IOException {
00176
00177 String serviceName = portComponentDesc.getServiceName();
00178 boolean hasLiteral = bEntry.hasLiteral();
00179 boolean hasMIME = Utils.hasMIME(bEntry);
00180 String styleStr = "";
00181 Use use = Use.DEFAULT;
00182 Iterator iterator = bEntry.getBinding().getExtensibilityElements().iterator();
00183
00184
00185 while (iterator.hasNext()) {
00186 Object obj = iterator.next();
00187
00188 if (obj instanceof SOAPBinding) {
00189 use = Use.ENCODED;
00190 } else if (obj instanceof UnknownExtensibilityElement) {
00191
00192
00193 UnknownExtensibilityElement unkElement = (UnknownExtensibilityElement) obj;
00194 QName name = unkElement.getElementType();
00195
00196 if (name.getNamespaceURI().equals(Constants.URI_WSDL12_SOAP) && name.getLocalPart().equals("binding")) {
00197 use = Use.ENCODED;
00198 }
00199 }
00200 }
00201
00202 if (getSymbolTable().isWrapped()) {
00203 styleStr = " style=\"" + Style.WRAPPED + "\"";
00204 use = Use.LITERAL;
00205 } else {
00206 styleStr = " style=\"" + bEntry.getBindingStyle().getName() + "\"";
00207
00208 if (hasLiteral) {
00209 use = Use.LITERAL;
00210 }
00211 }
00212
00213 String useStr = " use=\"" + use + "\"";
00214
00215 if (portComponentDesc.hasBeanImpl()) {
00216 pw.println(" <service name=\"" + serviceName + "\" provider=\"java:JOnASEJB\"" + styleStr + useStr + ">");
00217
00218 SSBPortComponentDesc ssbPCD = (SSBPortComponentDesc) portComponentDesc;
00219
00220 pw.println(" <parameter name=\"" + SERVICE_ENDPOINT_INTERFACE_NAME + "\" value=\""
00221 + ssbPCD.getServiceEndpointInterface().getName() + "\"/>");
00222 pw.println(" <parameter name=\"" + SERVICE_ENDPOINT_JNDI_NAME + "\" value=\""
00223 + ssbPCD.getSessionStatelessDesc().getJndiServiceEndpointName() + "\"/>");
00224
00225 } else {
00226 pw.println(" <service name=\"" + serviceName + "\" provider=\"java:RPC\"" + styleStr + useStr + ">");
00227 pw.println(" <parameter name=\"className\" value=\"" + portComponentDesc.getSIBClassname() + "\"/>");
00228
00229 }
00230
00231 pw.println(" <parameter name=\"wsdlTargetNamespace\" value=\"" + service.getQName().getNamespaceURI()
00232 + "\"/>");
00233 pw
00234 .println(" <parameter name=\"wsdlServiceElement\" value=\"" + service.getQName().getLocalPart()
00235 + "\"/>");
00236 pw.println(" <parameter name=\"wsdlServicePort\" value=\"" + serviceName + "\"/>");
00237
00238
00239 if (hasMIME) {
00240 pw.println(" <parameter name=\"sendMultiRefs\" value=\"false\"/>");
00241 }
00242
00243 writeDeployBinding(pw, bEntry);
00244 writeDeployTypes(pw, bEntry.getBinding(), hasLiteral, hasMIME, use);
00245
00246 List handlers = portComponentDesc.getHandlers();
00247 if (!handlers.isEmpty()) {
00248 pw.println(" <handlerInfoChain>");
00249 for (Iterator i = handlers.iterator(); i.hasNext();) {
00250 writeHandler(pw, (HandlerDesc) i.next());
00251 }
00252 pw.println(" </handlerInfoChain>");
00253 }
00254 pw.println(" </service>");
00255 }
00256
00263 protected void writeDeployBinding(PrintWriter pw, BindingEntry bEntry) throws IOException {
00264
00265 Binding binding = bEntry.getBinding();
00266
00267 pw.println(" <parameter name=\"wsdlPortType\" value=\"" + binding.getPortType().getQName().getLocalPart()
00268 + "\"/>");
00269
00270 HashSet allowedMethods = new HashSet();
00271
00272 if (!emitter.isSkeletonWanted()) {
00273 Iterator operationsIterator = binding.getBindingOperations().iterator();
00274
00275 for (; operationsIterator.hasNext();) {
00276 BindingOperation bindingOper = (BindingOperation) operationsIterator.next();
00277 Operation operation = bindingOper.getOperation();
00278 OperationType type = operation.getStyle();
00279 String javaOperName = JavaUtils.xmlNameToJava(operation.getName());
00280
00281
00282
00283 if ((type == OperationType.NOTIFICATION) || (type == OperationType.SOLICIT_RESPONSE)) {
00284 continue;
00285 }
00286
00287 allowedMethods.add(javaOperName);
00288
00289
00290
00291 Parameters params = getSymbolTable().getOperationParameters(operation, "", bEntry);
00292
00293 if (params != null) {
00294
00295
00296 QName elementQName = Utils.getOperationQName(bindingOper, bEntry, getSymbolTable());
00297
00298
00299 QName returnQName = null;
00300 QName returnType = null;
00301
00302 if (params.returnParam != null) {
00303 returnQName = params.returnParam.getQName();
00304 returnType = Utils.getXSIType(params.returnParam);
00305 }
00306
00307
00308 Map faultMap = bEntry.getFaults();
00309 ArrayList faults = null;
00310
00311 if (faultMap != null) {
00312 faults = (ArrayList) faultMap.get(bindingOper);
00313 }
00314
00315
00316 writeOperation(pw, javaOperName, elementQName, returnQName, returnType, params, binding.getQName(),
00317 faults);
00318 }
00319 }
00320 }
00321
00322 pw.print(" <parameter name=\"allowedMethods\" value=\"");
00323
00324 if (allowedMethods.isEmpty()) {
00325 pw.println("*\"/>");
00326 } else {
00327 boolean first = true;
00328
00329 for (Iterator i = allowedMethods.iterator(); i.hasNext();) {
00330 String method = (String) i.next();
00331
00332 if (first) {
00333 pw.print(method);
00334
00335 first = false;
00336 } else {
00337 pw.print(" " + method);
00338 }
00339 }
00340
00341 pw.println("\"/>");
00342 }
00343
00344 Scope scope = emitter.getScope();
00345
00346 if (scope != null) {
00347 pw.println(" <parameter name=\"scope\" value=\"" + scope.getName() + "\"/>");
00348 }
00349 }
00350
00355 protected void writeHandler(PrintWriter pw, HandlerDesc handler) {
00356 pw.println(" <handlerInfo classname=\"" + handler.getHandlerClassName() + "\">");
00357 Map params = handler.getInitParams();
00358 for (Iterator i = params.keySet().iterator(); i.hasNext();) {
00359 String pName = (String) i.next();
00360 pw.println(" <parameter name=\"" + pName + "\" value=\""
00361 + params.get(pName) + "\"/>");
00362 }
00363 List headers = handler.getSOAPHeaders();
00364 for (Iterator i = headers.iterator(); i.hasNext();) {
00365 QName sh = (QName) i.next();
00366 pw.println(" <header xmlns:ns=\"" + sh.getNamespaceURI() + "\" qname=\"ns:"
00367 + sh.getLocalPart() + "\"/>");
00368 }
00369 pw.println(" </handlerInfo>");
00370 List roles = handler.getSOAPRoles();
00371 for (Iterator i = roles.iterator(); i.hasNext();) {
00372 String role = (String) i.next();
00373 pw.println(" <role soapActorName=\"" + role + "\"/>");
00374 }
00375 }
00376
00380 protected String getPrefix() {
00381 return WSDD_PREFIX;
00382 }
00383
00384 }