我编写了一个在glassfish服务器上运行的soap客户端应用程序。
出于肥皂安全原因,我不得不更新Metro项目的一个类(SecurityHeather.java),它是通过webservices-osgi.jar glassfish的模块提供的。
无论如何都要覆盖glassfish \ modules \ webservices-osgi.jar中的类?
最简单的方法是更新jar文件中的类并保存它。但我不确定它是最好的方式。
答案 0 :(得分:4)
在搜索了很多类似的帖子并阅读了大量的glassfish文档之后,我能够找到解决这个问题的方法。有一个glassfish-web.xml部署描述符,它定义了元素类加载器。默认情况下,类加载器将所有类加载功能委托给其父类加载器,后者在glassfish安装目录的modules文件夹中查找jar。如果我们将class-loader元素的delegate属性设置为false,则委托模型被反转,子类加载器执行类加载,首先加载war库中可用的类,然后查看glassfish模块文件夹。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish
Application Server 3.1 Servlet 3.0//EN"
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
<context-root>/SampleApp</context-root>
<class-loader delegate="false"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class' java code.
</description>
</property>
</jsp-config>
</glassfish-web-app>
答案 1 :(得分:0)
似乎不可能。我只是复制jar文件中的类。并重新启动服务器
但是我让它自动用maven覆盖了这个类。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.glassfish.metro</groupId>
<artifactId>webservices-osgi</artifactId>
<version>${original.webservices-osgi.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<excludes>
**/SecurityHeader*.class
</excludes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 2 :(得分:0)
是的,这是可能的。研究JRebel或DCEVM + Hotswap