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;
}
}
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;
}
}
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;
}
Aggregations