I had an idea to create an easier test case. I traced the problem to when a
Service is created and replicated this in a new OSGi module like so:
package uk.ac.ox.sddag.api.osgi.basicwsblowupmodule;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
MyService mys = new MyService(null, null);
}
public void stop(BundleContext context) throws Exception {
// TODO add deactivation code here
}
public class MyService extends Service {
public MyService(URL url, QName qname) {
super(url, qname);
}
}
}
Result:
SEVERE: Exception while loading the app : Activator start error in bundle
uk.ac.ox.sddag.api.osgi.basicWSBlowupModule [412].
javax.xml.ws.WebServiceException: Provider
com.sun.xml.internal.ws.spi.ProviderImpl not found
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:68)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:163)
at javax.xml.ws.spi.Provider.provider(Provider.java:142)
at javax.xml.ws.Service.<init>(Service.java:92)
at
uk.ac.ox.sddag.api.osgi.basicwsblowupmodule.Activator$MyService.<init>(Activator.java:24)
at
uk.ac.ox.sddag.api.osgi.basicwsblowupmodule.Activator.start(Activator.java:12)
at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:629)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1835)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1752)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:922)
at
org.glassfish.extras.osgicontainer.OSGiDeployedBundle.resume(OSGiDeployedBundle.java:83)
at
org.glassfish.extras.osgicontainer.OSGiDeployedBundle.start(OSGiDeployedBundle.java:62)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130)
at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269)
at
org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:286)
at
com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461)
at
org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:372)
at
com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
at
com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
at
com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067)
at
com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
at
com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247)
at
com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465)
at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222)
at
com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
at
com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
at
com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.ClassNotFoundException:
com.sun.xml.internal.ws.spi.ProviderImpl not found by
org.glassfish.metro.webservices-api-osgi [2]
at
org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787)
at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)
at
org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at javax.xml.ws.spi.FactoryFinder.safeLoadClass(FactoryFinder.java:182)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:65)
... 41 more
Same result when I do:
System.setProperty("javax.xml.ws.spi.Provider",
"com.sun.xml.ws.spi.ProviderImpl");
except it's looking for that provider instead.
Thanks
On 1 July 2011 15:08, Douglas Russell <[email protected]>wrote:
> Hi,
>
> I have a module which has an embedded library that needs to make use of
> secure web-service calls, not something I can change.
>
> My problem is that at runtime the module decides to
> use org.glassfish.metro.webservices-api-osgi and that fails to
> find com.sun.xml.ws.spi.ProviderImpl or
> com.sun.xml.internal.ws.spi.ProviderImpl. I don't understand how this is
> possible, surely that module must have to have access to that class? I'm
> using glassfish 3.1.
>
> I've read a million problems with ProviderImpl and even some with osgi and
> ProviderImpl, but no clear answers as to how to fix this.
>
> I know I have some embedded dependancies and custom maven dependencies that
> I probably don't need, but I'm pretty sure that's not the problem and I can
> worry about that later.
>
> Any advice as to how to fix this are appreciated, I'm completely at a loss
> for what to try next. I'm more than happy to provide any additional
> information or answer any questions to get to the answer.
>
> Thanks,
>
> Douglas
>
> My pom:
>
>
> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/xsd/maven-4.0.0.xsd">
> <modelVersion>4.0.0</modelVersion>
>
> <groupId>uk.ac.ox.sddag.api.osgi</groupId>
> <artifactId>sifOSGiModule</artifactId>
> <version>1.0-SNAPSHOT</version>
> <packaging>bundle</packaging>
>
> <name>sifOSGiModule OSGi Bundle</name>
>
> <properties>
> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> <cxf.version>2.2.7</cxf.version>
> </properties>
>
> <dependencies>
> <dependency>
> <groupId>org.apache.felix</groupId>
> <artifactId>org.osgi.core</artifactId>
> <version>1.4.0</version>
> </dependency>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>java6-api</artifactId>
> <version>sif-20110624</version>
> </dependency>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>bcpg</artifactId>
> <version>sif-20110624</version>
> </dependency>
>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>bcprov</artifactId>
> <version>sif-20110624</version>
> </dependency>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>commons-codec</artifactId>
> <version>sif-20110624</version>
> </dependency>
>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>commons-httpclient</artifactId>
> <version>sif-20110624</version>
> </dependency>
>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>commons-logging</artifactId>
> <version>sif-20110624</version>
> </dependency>
>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>jakarta-slide-webdavlib</artifactId>
> <version>sif-20110624</version>
> </dependency>
>
> <dependency>
> <groupId>uk.ac.ox.sddag.api</groupId>
> <artifactId>jdom</artifactId>
> <version>sif-20110624</version>
> </dependency>
> <dependency>
> <groupId>org.glassfish.metro</groupId>
> <artifactId>webservices-osgi</artifactId>
> <version>2.1-20</version>
> </dependency>
>
> <dependency>
> <groupId>org.glassfish.metro</groupId>
> <artifactId>webservices-rt</artifactId>
> <version>2.1-20</version>
> </dependency>
>
> </dependencies>
>
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.felix</groupId>
> <artifactId>maven-bundle-plugin</artifactId>
> <version>2.2.0</version>
> <extensions>true</extensions>
> <configuration>
> <instructions>
> <Import-Package>*;resolution:=optional</Import-Package>
> <Bundle-Activator>uk.ac.ox.sddag.api.osgi.Activator</Bundle-Activator>
> <Export-Package>uk.ac.ox.sddag.api.osgi.service</Export-Package>
> <Private-Package>uk.ac.ox.sddag.api.osgi.*</Private-Package>
>
>
> <Embed-Dependency>java6-api,bcpg,bcprov,commons-codec,commons-httpclient,commons-logging,jakarta-slide-webdavlib,jdom;scope=compile|runtime</Embed-Dependency>
> <Embed-Transitive>true</Embed-Transitive>
> </instructions>
> </configuration>
> </plugin>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-surefire-plugin</artifactId>
> <version>2.5</version>
> <configuration>
> <forkMode>once</forkMode>
> <argLine>-Xms512m -Xmx512m</argLine>
> </configuration>
> </plugin>
> </plugins>
> </build>
>
> <profiles>
> <profile>
> <id>build-for-felix</id>
> <dependencies>
> <dependency>
> <groupId>org.apache.felix</groupId>
> <artifactId>org.apache.felix.main</artifactId>
> <version>3.0.7</version>
> <scope>provided</scope>
> </dependency>
> <!-- To include a shell:
> <dependency>
> <groupId>org.apache.felix</groupId>
> <artifactId>org.apache.felix.gogo.shell</artifactId>
> <version>0.6.1</version>
> </dependency>
> -->
> </dependencies>
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-antrun-plugin</artifactId>
> <version>1.6</version>
> <executions>
> <execution>
> <id>compile</id>
> <phase>package</phase>
> <goals>
> <goal>run</goal>
> </goals>
> <configuration>
> <target>
> <pathconvert property="plugins.jars" pathsep="${path.separator}">
> <path refid="maven.runtime.classpath"/>
> <map from="${project.build.directory}${file.separator}classes" to=""/>
> </pathconvert>
> <pathconvert pathsep=" " property="bundles">
> <path path="${plugins.jars}"/>
> <mapper>
> <chainedmapper>
> <flattenmapper/>
> <globmapper from="*" to="file:modules/*" casesensitive="no"/>
> </chainedmapper>
> </mapper>
> </pathconvert>
> <propertyfile file="${project.build.directory}/config.properties">
> <entry key="felix.auto.start" value="${bundles}
> file:modules/${project.build.finalName}.jar"/>
> <entry key="org.osgi.framework.bootdelegation" value="*"/>
> </propertyfile>
> <copy
> file="${maven.dependency.org.apache.felix.org.apache.felix.main.jar.path}"
> tofile="${project.build.directory}/felix.jar"/>
> </target>
> </configuration>
> </execution>
> </executions>
> </plugin>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-assembly-plugin</artifactId>
> <version>2.2</version>
> <executions>
> <execution>
> <id>create-executable-jar</id>
> <phase>package</phase>
> <goals>
> <goal>single</goal>
> </goals>
> <configuration>
> <descriptors>
> <descriptor>${basedir}/src/main/assembly/felix.xml</descriptor>
> </descriptors>
> <finalName>${project.build.finalName}</finalName>
> </configuration>
> </execution>
> </executions>
> </plugin>
> </plugins>
> </build>
> </profile>
> <profile>
> <id>run-on-felix</id>
> <dependencies>
> <dependency>
> <groupId>org.apache.felix</groupId>
> <artifactId>org.apache.felix.main</artifactId>
> <version>3.0.7</version>
> <scope>provided</scope>
> </dependency>
> <!-- org.apache.felix:org.apache.felix.gogo.shell:0.6.1
> useless from Maven since stdin is swallowed -->
> </dependencies>
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-antrun-plugin</artifactId>
> <version>1.6</version>
> <configuration>
> <target>
> <property name="vm.args" value=""/>
> <pathconvert property="plugins.jars" pathsep="${path.separator}">
> <path refid="maven.runtime.classpath"/>
> <map from="${project.build.directory}${file.separator}classes" to=""/>
> </pathconvert>
> <makeurl property="urls" separator=" ">
> <path path="${plugins.jars}"/>
> <path
> location="${project.build.directory}/${project.build.finalName}.jar"/>
> </makeurl>
> <propertyfile file="${project.build.directory}/run.properties">
> <entry key="felix.auto.start" value="${urls}"/>
> <entry key="felix.auto.deploy.action"
> value="uninstall,install,update,start"/>
> <entry key="org.osgi.framework.storage"
> value="${project.build.directory}${file.separator}felix-cache"/>
> <entry key="org.osgi.framework.bootdelegation" value="*"/>
> </propertyfile>
> <makeurl property="run.properties.url"
> file="${project.build.directory}/run.properties"/>
> <java fork="true"
> jar="${maven.dependency.org.apache.felix.org.apache.felix.main.jar.path}">
> <sysproperty key="felix.config.properties"
> value="${run.properties.url}"/>
> <jvmarg line="${vm.args}"/>
> </java>
> </target>
> </configuration>
> </plugin>
> </plugins>
> </build>
> </profile>
> </profiles>
> </project>
>
>
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev