1

我们有一个通过 apache cxf 生成 wsdl 客户端的 maven 项目。主要目标是完全生成服务包装器,这样只有 wsdl 文件必须在版本控制下进行维护。

<plugin>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <version>2.7.5</version>
  <executions>
    <execution>
      <id>generate-sources</id>
      <phase>generate-sources</phase>
      <configuration>
        <wsdlOptions>
          <wsdlOption>
            <wsdl>src/main/resources/WSAnzeigeKunde.wsdl</wsdl>
            <extraargs>
              <extraarg>-frontend</extraarg>
              <extraarg>jaxws21</extraarg>
              <extraarg>-p</extraarg>
              <extraarg>http://www.die-software.com/xsd/OBS_ANZEIGE_KUNDE_ANTWORT.xsd=com.diesoftware.service.anzeigekunde</extraarg>
            </extraargs>
          </wsdlOption>
        </wsdlOptions>
      </configuration>
      <goals>
        <goal>wsdl2java</goal>
      </goals>
    </execution>
  </executions>
</plugin>

到目前为止,这工作正常。结果代码看起来像

public class WSAnzeigeAssetsummenService extends Service {
  public final static URL WSDL_LOCATION;
  public final static QName SERVICE = new QName("http://www.die-software.com/xsd/OBS_ANZEIGE_ASSETSUMMEN_ANTWORT.xsd", "WSAnzeigeAssetsummenService");
  public final static QName WSAnzeigeAssetsummenPort = new QName("http://www.die-software.com/xsd/OBS_ANZEIGE_ASSETSUMMEN_ANTWORT.xsd", "WSAnzeigeAssetsummenPort");
  static {
      URL url = null;
      try {
        url = new URL("file:/C:/Data/workspace-temp/WebAppPOC/src/main/resources/WSAnzeigeAssetsummen.wsdl");
      } catch (MalformedURLException e) {
        java.util.logging.Logger.getLogger(WSAnzeigeAssetsummenService.class.getName())
            .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "file:/C:/Data/workspace-temp/WebAppPOC/src/main/resources/WSAnzeigeAssetsummen.wsdl");
      }
      WSDL_LOCATION = url;
  }

我发现 cxf 支持 SLF4J ( http://cxf.apache.org/docs/debugging-and-logging.html#DebuggingandLogging-UsingLog4jInsteadofjava.util.logging ) 但这似乎不属于 wsdl2java。

真的没有办法配置wsdl2java,使用任何其他记录器。

4

1 回答 1

1

不适用于这种特殊情况,不。JAX-WS 规范要求这些生成的服务类在任何符合 JAX-WS 的环境中都是 100% 可用的。这将包括 JDK 中没有任何其他日志记录实现的那个。

对于 CXF 3.0,我们已经开始讨论 wsdl2java 的新“cxf”前端,它允许更多地使用 CXF 特定的 API 和特性,但显然不会 100% 兼容 JAX-WS。

于 2013-06-05T21:11:31.397 回答