相关疑难解决方法(0)

在运行时覆盖或设置Web服务端点,以获取使用wsimport生成的代码

使用生成的代码,是否wsimport可以覆盖服务端点而无需重新生成代码?

我写了一个简单的java webservice,以下是步骤:

  1. 我编译java类并生成war文件
  2. 将war文件部署到我的应用服务器(tomcat)
  3. 通过URL访问WSDL,例如localhost:8080/service/helloservice?wsdl
  4. 使用带有wsimport.bat的URL来生成客户端类,例如: wsimport http://localhost:8080/service/helloservice?Wsdl
  5. 我在客户端应用程序中使用这些类来调用服务

问题是服务是部署在8080以外的端口上运行的应用服务器上,客户端和服务之间的通信永远不会发生.我想知道在客户端使用的存根中创建没有服务器和端口硬编码的存根的最佳方法是什么.

java jax-ws

51
推荐指数
1
解决办法
6万
查看次数

"无法初始化默认的wsdl ......" - 为什么?

pom.xml包含以下内容,为具有下面指定的WSDL的工作Web服务自动生成客户端:

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <configuration>
                        <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>${basedir}/src/main/wsdl/myclient.wsdl</wsdl>
                                <extraargs>
                                    <extraarg>-client</extraarg>
                                    <extraarg>-verbose</extraarg>
                                </extraargs>
                                <wsdlLocation>wsdl/myclient.wsdl</wsdlLocation>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

项目构建正常,没有任何错误或警告,我可以在文件夹myclient.wsdl下的JAR文件中看到该wsdl文件.

但是当我尝试运行那个JAR时:

  java -Xmx1028m -jar myclient-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)

它抱怨"无法从wsdl/myclient.wsdl初始化默认的wsdl"

为什么?

我错过了什么?

我如何找出什么路径wsdl/myclient.wsdl在pom.xml中转化为,使客户的JAR抱怨在运行时?

更新:我知道一些涉及修改自动生成代码的解决方案/解决方法:

  1. 为wsdl URL传递"null",然后使用((BindingProvider)端口).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY," http://example.com/ ....")来设置地址.
  2. 将WSDL作为Java资源加载并将其位置传递到服务的构造函数中.

但是我更感兴趣的是一个解决方案,需要输入正确的值pom.xml类似于类路径方法(但遗憾的是,由于某种原因,类路径不适合我).

相反,我应该在那里打字的任何想法?显然,这是一个非常简单的例子,可以找出该特定插件的正确路径规则,但我遗漏了一些东西而且我不知道它是什么.

wsdl cxf wsdl2java pom.xml

10
推荐指数
2
解决办法
5993
查看次数

jaxws-maven-plugin解析相对于类位置的WSDL位置,为什么?

我正在使用该jaxws-maven-plugin版本2.1.我发现从jar资源为WSDL位置生成了非常奇怪的代码:

                <configuration>
                    <keep>true</keep>
                    <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
                    <extension>true</extension>
                    <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
                    <packageName>my.package.gen</packageName>
                    <wsdlLocation>wsdl/*</wsdlLocation>
                    <wsdlFiles>
                        <wsdlFile>mywsdl.wsdl</wsdlFile>                            
                    </wsdlFiles>
                </configuration>
Run Code Online (Sandbox Code Playgroud)

生成的代码是:

static {
    URL url = null;
    try {
        URL baseUrl;
        baseUrl = my.package.gen.My_Service.class.getResource(".");
        url = new URL(baseUrl, "wsdl/mywsdl.wsdl");
    } catch (MalformedURLException e) {
        logger.warning("Failed to create URL for the wsdl Location: 'wsdl/mywsdl.wsdl', retrying as a local file");
        logger.warning(e.getMessage());
    }
    MYSERVICE_WSDL_LOCATION = url; }
Run Code Online (Sandbox Code Playgroud)

所以wsdl文件在目录(包)中查找生成的类居民,而不是在主jar目录中,因为这是合乎逻辑的.并且无法找到WSDL.

它是一个错误jaxws-maven-plugin,还是我配置中的错误?

java wsdl jax-ws maven-plugin maven

6
推荐指数
1
解决办法
1万
查看次数

CXF Webservice Client中WSDL的相对路径

在我的应用程序中,我使用了许多Web服务.由于WSDL没有改变,我已经在我的项目中集成了WSDL文件.如果我使用来自CXF的WSDL2Java工具,则WSDL位置绝对路径是硬编码的.

现在我的问题是,如何将@WebserviceClient Annotation中的"wsdlocation"参数更改为相对路径?

这是一个例子:

@WebServiceClient(name = "Time", 
                  wsdlLocation = "file:/C:/Users/dominik/Documents/NetBeansProjects/Webservices/src/wsdl/Time.wsdl" ) /*I want this path to be relative */
public class Time extends Service {
Run Code Online (Sandbox Code Playgroud)

wsdl cxf relative-path

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

wsdl ×3

cxf ×2

java ×2

jax-ws ×2

maven ×1

maven-plugin ×1

pom.xml ×1

relative-path ×1

wsdl2java ×1