我的应用程序需要与SharePoint的一个Web服务集成。此Web服务无法自由访问,需要身份验证。
因此,我的应用程序中的标准wsdl2java Maven插件在执行generate-sources阶段时会出现HTTP 401错误。
有没有办法设置Maven / POM,以便我可以提供生成存根的用户/密码?
我遇到了一些答案,说这是不可能的,但所有答案都超过1年。我还没有发现Maven是否已发布此更新。一种选择是保存WSDL的本地副本(如建议的here),但我希望避免使用本地副本。
答案 0 :(得分:8)
因为你提到过CXF,所以我想你的意思是cxf-codegen-plugin。这有点像黑客但它有效。
可以使用java.net.Authenticator提供HTTP身份验证凭据。需要定义自己的Authenticator类,它覆盖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的依赖项:
<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>
这样,AuthenticatorReplacer由CXF扩展机制初始化,并用我们的默认Authenticator替换。
答案 1 :(得分:1)
@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>
重要提示:您的AuthenticatorReplacer
必须是main(String[] args)
类并在其中运行代码。
答案 2 :(得分:0)
我确认了Dawid的解决方案有效。或者,您可以使用SoapUI下拉并缓存wsdl,然后使用SoapUi代码生成支持来使用cxf生成代码。
答案 3 :(得分:-1)
Dawid的解决方案也适用于我。虽然这有点棘手。在Eclipse中,pom.xml一直在抱怨“wsdl2java失败:无法加载扩展类AuthenticatorReplacer”。您必须忽略此错误消息并使用命令行:
mvn generate-sources
然后将成功生成Java类。