Search in sources :

Example 1 with WsUtil

use of org.glassfish.webservices.WsUtil in project Payara by payara.

the class JaxRpcRICodegen method accept.

/**
 * Visits a webs service reference
 */
@Override
public void accept(ServiceReferenceDescriptor serviceRef) {
    if (!processServiceReferences) {
        return;
    }
    boolean codegenRequired = false;
    URL wsdlOverride = null;
    boolean wsdlOverriden = false;
    boolean jaxwsClient = false;
    super.accept(serviceRef);
    try {
        ClassLoader clr = serviceRef.getBundleDescriptor().getClassLoader();
        if (serviceRef.getServiceInterface() != null) {
            Class serviceInterface = clr.loadClass(serviceRef.getServiceInterface());
            if (javax.xml.ws.Service.class.isAssignableFrom(serviceInterface)) {
                jaxwsClient = true;
            }
        }
        // already set.
        for (Iterator ports = serviceRef.getPortsInfo().iterator(); ports.hasNext(); ) {
            ServiceRefPortInfo portInfo = (ServiceRefPortInfo) ports.next();
            if (portInfo.isLinkedToPortComponent()) {
                WebServiceEndpoint linkedPortComponent = portInfo.getPortComponentLink();
                if (linkedPortComponent == null) {
                    throw new Exception(localStrings.getLocalString("enterprise.webservice.componentlinkunresolved", "The port-component-link {0} cannot be resolved", new Object[] { portInfo.getPortComponentLinkName() }));
                }
                WsUtil wsUtil = new WsUtil();
                WebServerInfo wsi = wsUtil.getWebServerInfoForDAS();
                URL rootURL = wsi.getWebServerRootURL(linkedPortComponent.isSecure());
                URL actualAddress = linkedPortComponent.composeEndpointAddress(rootURL);
                if (jaxwsClient) {
                    portInfo.addStubProperty(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, actualAddress.toExternalForm());
                } else {
                    portInfo.addStubProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, actualAddress.toExternalForm());
                }
                if (serviceRef.getBundleDescriptor().getModuleType().equals(DOLUtils.carType())) {
                    wsdlOverride = serviceRef.getWsdlOverride();
                    if (wsdlOverride != null) {
                        wsdlOverriden = true;
                        serviceRef.setWsdlOverride(linkedPortComponent.getWebService().getWsdlFileUrl());
                    }
                }
            }
        }
        // If this is a post JAXRPC-1.1 based web service, then no need for code gen etc etc
        if (jaxwsClient) {
            return;
        }
        if (serviceRef.hasGeneratedServiceInterface()) {
            if (serviceRef.hasWsdlFile() && serviceRef.hasMappingFile()) {
                codegenRequired = true;
            } else {
                throw new Exception("Deployment error for service-ref " + serviceRef.getName() + ".\nService references with generated service " + "interface must include WSDL and mapping information.");
            }
        } else {
            if (serviceRef.hasWsdlFile()) {
                if (serviceRef.hasMappingFile()) {
                    codegenRequired = true;
                } else {
                    throw new Exception("Deployment error for service-ref " + serviceRef.getName() + ".\nService references with wsdl must also have " + "mapping information.");
                }
            }
        }
        if (codegenRequired) {
            ModelInfo modelInfo = createModelInfo(serviceRef);
            /*
                 * If clients exist, force regeneration so that the
                 * ClientArtifactsManager is populated. Issue 10612.
                 */
            String[] args = createJaxrpcCompileArgs(false, hasWebServiceClients);
            CompileTool wscompile = rpcFactory.createCompileTool(System.out, "wscompile");
            wscompileForAccept = wscompile;
            WsCompile delegate = new WsCompile(wscompile, serviceRef);
            delegate.setModelInfo(modelInfo);
            wscompile.setDelegate(delegate);
            jaxrpc(args, delegate, serviceRef, files);
            if (hasWebServiceClients) {
                addArtifactsForAppClient();
            }
        }
        if (wsdlOverriden) {
            serviceRef.setWsdlOverride(wsdlOverride);
        }
    } catch (IllegalStateException e) {
        // do nothing
        logger.info("Attempting to add artifacts for appClient after artifacts were generated" + " " + e.getMessage());
    } catch (Exception e) {
        RuntimeException re = new RuntimeException(e.getMessage());
        re.initCause(e);
        throw re;
    }
}
Also used : CompileTool(com.sun.xml.rpc.spi.tools.CompileTool) ModelFileModelInfo(com.sun.xml.rpc.spi.tools.ModelFileModelInfo) ModelInfo(com.sun.xml.rpc.spi.tools.ModelInfo) J2EEModelInfo(com.sun.xml.rpc.spi.tools.J2EEModelInfo) NoMetadataModelInfo(com.sun.xml.rpc.spi.tools.NoMetadataModelInfo) WebServerInfo(org.glassfish.web.deployment.util.WebServerInfo) WsUtil(org.glassfish.webservices.WsUtil) URL(java.net.URL) IOException(java.io.IOException) Iterator(java.util.Iterator) ASURLClassLoader(com.sun.enterprise.loader.ASURLClassLoader) WsCompile(org.glassfish.webservices.WsCompile)

Example 2 with WsUtil

use of org.glassfish.webservices.WsUtil in project Payara by payara.

the class JaxRpcRICodegen method accept.

/**
 * visits a web service definition
 * @param webService
 */
@Override
public void accept(WebService webService) {
    if (processServiceReferences) {
        return;
    }
    if (!webServiceInContext(webService)) {
        return;
    }
    super.accept(webService);
    try {
        if ((new WsUtil()).isJAXWSbasedService(webService)) {
            WsUtil wsUtil = new WsUtil();
            Collection<WebServiceEndpoint> endpoints = webService.getEndpoints();
            for (WebServiceEndpoint ep : endpoints) {
                if (ep.implementedByWebComponent()) {
                    wsUtil.updateServletEndpointRuntime(ep);
                } else {
                    wsUtil.validateEjbEndpoint(ep);
                }
            }
        // wsImport(webService,  files);
        } else {
            jaxrpcWebService(webService, files);
        }
    } catch (Exception e) {
        RuntimeException ge = new RuntimeException(e.getMessage());
        ge.initCause(e);
        throw ge;
    }
}
Also used : WsUtil(org.glassfish.webservices.WsUtil) IOException(java.io.IOException)

Example 3 with WsUtil

use of org.glassfish.webservices.WsUtil in project Payara by payara.

the class JaxRpcRICodegen method createNoMetadataModelInfo.

private NoMetadataModelInfo createNoMetadataModelInfo(ServiceReferenceDescriptor serviceRef, JaxrpcMappingDescriptor mappingDesc) throws Exception {
    NoMetadataModelInfo modelInfo = rpcFactory.createNoMetadataModelInfo();
    URL wsdlFile = serviceRef.hasWsdlOverride() ? serviceRef.getWsdlOverride() : serviceRef.getWsdlFileUrl();
    modelInfo.setLocation(wsdlFile.toExternalForm());
    // Service endpoint interface is required.  Parse generated
    // service interface for it since we can't count on SEI
    // having been listed in standard deployment information.
    WsUtil wsUtil = new WsUtil();
    String serviceInterfaceName = serviceRef.getServiceInterface();
    ClassLoader cl = context.getModuleMetaData(Application.class).getClassLoader();
    if (cl instanceof ASURLClassLoader) {
        String modClassPath = ASClassLoaderUtil.getModuleClassPath(habitat, context);
        List<URL> moduleList = ASClassLoaderUtil.getURLsFromClasspath(modClassPath, File.pathSeparator, null);
        for (Iterator<URL> itr = moduleList.iterator(); itr.hasNext(); ) {
            ((ASURLClassLoader) cl).appendURL(itr.next());
        }
    }
    Class serviceInterface = cl.loadClass(serviceInterfaceName);
    Collection seis = wsUtil.getSEIsFromGeneratedService(serviceInterface);
    if (seis.size() == 0) {
        throw new Exception("Invalid Generated Service Interface " + serviceInterfaceName + " . ");
    } else if (seis.size() > 1) {
        throw new Exception("Deployment error : If no " + "jaxrpc-mapping file is provided, " + "Generated Service Interface must have" + " only 1 Service Endpoint Interface");
    }
    String serviceEndpointInterface = (String) seis.iterator().next();
    modelInfo.setInterfaceName(serviceEndpointInterface);
    addNamespaceMappingRegistry(modelInfo, mappingDesc);
    return modelInfo;
}
Also used : ASURLClassLoader(com.sun.enterprise.loader.ASURLClassLoader) ASURLClassLoader(com.sun.enterprise.loader.ASURLClassLoader) Collection(java.util.Collection) NoMetadataModelInfo(com.sun.xml.rpc.spi.tools.NoMetadataModelInfo) WsUtil(org.glassfish.webservices.WsUtil) URL(java.net.URL) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)3 WsUtil (org.glassfish.webservices.WsUtil)3 ASURLClassLoader (com.sun.enterprise.loader.ASURLClassLoader)2 NoMetadataModelInfo (com.sun.xml.rpc.spi.tools.NoMetadataModelInfo)2 URL (java.net.URL)2 CompileTool (com.sun.xml.rpc.spi.tools.CompileTool)1 J2EEModelInfo (com.sun.xml.rpc.spi.tools.J2EEModelInfo)1 ModelFileModelInfo (com.sun.xml.rpc.spi.tools.ModelFileModelInfo)1 ModelInfo (com.sun.xml.rpc.spi.tools.ModelInfo)1 Collection (java.util.Collection)1 Iterator (java.util.Iterator)1 WebServerInfo (org.glassfish.web.deployment.util.WebServerInfo)1 WsCompile (org.glassfish.webservices.WsCompile)1