将Maven配置为使用CXF wsdl2java进行基本身份验证
我有一个应用程序需要与SharePoint的一个web服务集成。此web服务无法自由访问,需要身份验证 因此,当执行generate sources阶段时,我的应用程序中的标准wsdl2java Maven插件会给出HTTP 401错误 有没有办法设置Maven/POM,这样我就可以提供生成存根的用户/密码将Maven配置为使用CXF wsdl2java进行基本身份验证,maven,cxf,basic-authentication,pom.xml,Maven,Cxf,Basic Authentication,Pom.xml,我有一个应用程序需要与SharePoint的一个web服务集成。此web服务无法自由访问,需要身份验证 因此,当执行generate sources阶段时,我的应用程序中的标准wsdl2java Maven插件会给出HTTP 401错误 有没有办法设置Maven/POM,这样我就可以提供生成存根的用户/密码 我遇到一些答案说这是不可能的,但所有答案都超过1年。我还没有发现Maven是否发布了这方面的更新。一种选择是保存WSDL的本地副本(如建议的),但我希望避免本地副本。因为您提到了CXF,所以
我遇到一些答案说这是不可能的,但所有答案都超过1年。我还没有发现Maven是否发布了这方面的更新。一种选择是保存WSDL的本地副本(如建议的),但我希望避免本地副本。因为您提到了CXF,所以我想您指的是CXF codegen插件。这是一个有点黑客,但它的工作 可以使用java.net.Authenticator提供HTTP身份验证凭据。只需定义自己的验证器类,该类重写getPasswordAuthentication(..)方法。然后必须将其设置为默认验证器。据我所知,它不能以声明的方式(例如使用环境属性)只使用Authenticator.setDefault(..)以编程的方式完成 为了调用Authenticator.setDefault(..),我将使用CXF扩展机制。使用类似类创建单独的maven项目:
public class AuthenticatorReplacer {
public AuthenticatorReplacer(Bus bus) {
java.net.Authenticator.setDefault(new java.net.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("test", "test123"
.toCharArray());
}
});
}
}
和文件src\main\resources\META-INF\cxf\bus-extensions.txt,内容如下:
org.example.AuthenticatorReplacer::false
然后将新创建的项目作为依赖项添加到cxf codegen插件:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${project.version}</version>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>cxf-authenticator-replacer</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
</plugin>
org.apache.cxf
cxf-codegen插件
${project.version}
org.example
cxf验证器替换程序
0.0.1-快照
...
通过这种方式,AuthenticatorReplace由CXF扩展机制初始化,并用我们的验证器替换默认验证器。我验证了Dawid的解决方案是有效的。或者,您可以使用SoapUI下拉并缓存wsdl,然后使用SoapUI代码生成支持使用cxf生成代码
Dawid的解决方案也适用于我。不过这有点棘手。在Eclipse中,pom.xml不断抱怨“wsdl2java失败:无法加载扩展类AuthenticatorReplace”。您必须忽略此错误消息并使用命令行: mvn生成源
然后将成功生成Java类。替代@Dawid Pytel解决方案的另一种方法是在wsdl类自动生成的生命周期中运行此类:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>path.to.AuthenticatorReplacer</mainClass>
</configuration>
</plugin>
org.codehaus.mojo
execmaven插件
1.4.0
生成源
JAVA
path.to.AuthenticatorReplacer
重要提示:您的
AuthenticatorReplacer
必须是main(String[]args)
类,并在其中运行代码。欢迎访问该站点。评论应该以这样的方式发布,而不是作为答案。如果您需要解决不同的问题,请随意提出单独的问题。请参阅:[帮助中心>回答删除某些答案的原因和方式?]()。欢迎访问该网站。评论应该以这样的方式发布,而不是作为答案。如果您需要解决不同的问题,请随意提出单独的问题。你今天用这个救了我的命。如果任何人都能找到如何在没有“黑客”的情况下实现同样的功能,那就太好了,但它是有效的。您的解决方案不允许外部化登录/密码信息。此外,exec插件需要编译该类,而不是在生成源代码阶段。