Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Maven配置为使用CXF wsdl2java进行基本身份验证_Maven_Cxf_Basic Authentication_Pom.xml - Fatal编程技术网

将Maven配置为使用CXF wsdl2java进行基本身份验证

将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,所以

我有一个应用程序需要与SharePoint的一个web服务集成。此web服务无法自由访问,需要身份验证

因此,当执行generate sources阶段时,我的应用程序中的标准wsdl2java Maven插件会给出HTTP 401错误

有没有办法设置Maven/POM,这样我就可以提供生成存根的用户/密码


我遇到一些答案说这是不可能的,但所有答案都超过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插件需要编译该类,而不是在生成源代码阶段。