标签: wsimport

wsimport - 如何在单独的项目/文件夹中生成服务端点类和JAXB类

对于具有多个Web服务(多个WSDL)的项目,我们使用自上而下的方法.每个Web服务都需要设置为单独的项目,并作为单独的战争部署.

问题是WSDL共享一些常见的.xsd文件.目前,如果我们为每个WSDL运行wsimport,则每个Web服务项目中都会复制常见的JAXB类.

理想情况下,我们希望在公共共享项目中单独生成JAXB类,然后在每个Web服务项目中重用JAXB类项目,但wsimport不提供跳过JAXB类生成或指定其他位置的选项对于JAXB类.

关于如何在不同的JAX-WS Web服务端点之间共享JAXB类的任何想法?

java web-services jax-ws jaxb wsimport

11
推荐指数
2
解决办法
3万
查看次数

Java Web服务错误:com.ctc.wstx.exc.WstxEOFException:prolog中出现意外的EOF

我在创建Java客户端并将其连接到正在运行的Web Service时遇到问题.

我使用以下代码:

Service myService  = null;
URL wsdlLocation = new URL("http://myservice?wsdl");
QName serviceName = new QName(wsdlLocation, "MyService");
Service myService = new Service(wsdlLocation, serviceName);
Run Code Online (Sandbox Code Playgroud)

使用以下命令创建Service类的位置:

wsimport -d gen -keep http://myservice?wsdl
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用Apache cxf 2.4的wsdl2java生成的客户端,但得到了相同的结果.

(我已经在我使用原始代码的代码中更改了此帖子的WSDL位置和服务类名称.)

但是当我使用新的Service()命令创建服务时,我在appserver上调用Web Service时遇到异常.但是:我用SOAP UI测试了wsdl位置,它运行得很好.此外,我使用Soap UI创建了一个模拟服务,我的Java客户端可以连接到它,调用它并获得结果.当我想要调用在appserver上运行的Web服务时,会出现问题.

堆栈跟踪:

javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
        at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:149)
        at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:98)
        at javax.xml.ws.Service.<init>(Service.java:76)
        at MyService.<init>(MyService.java:42)
        at mypackage.createService(AClass.java:288)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
        at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:100)
        at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:199)
        at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147)
        ... 12 more …
Run Code Online (Sandbox Code Playgroud)

java wsdl web-services jax-ws wsimport

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

为JAXB中的每个生成的类生成唯一的可序列化id

我正在使用ant wsimport从wsdls生成客户端存根.另外,我想生成实现的客户端类Serializable.我想serialVersionUID为每个班级生成一个不同的.我尝试使用下面显示的绑定文件.但它serialVersionUID为所有类生成相同.有什么方法可以把我自己serialVersionUID的每个班级都给自己?

<wsimport xendorsed="true" binding="binding.xml" debug="true" keep="true" 
verbose="false"  sourcedestdir="${generated}" wsdl="${src}${wsdl.file}"
wsdlLocation="${wsdl.file}">
</wsimport>
Run Code Online (Sandbox Code Playgroud)

绑定配置

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <globalBindings>   
        <serializable uid="1" />        
    </globalBindings>    
</bindings>
Run Code Online (Sandbox Code Playgroud)

java serialization jaxb xjc wsimport

11
推荐指数
1
解决办法
4834
查看次数

以编程方式将WsImport与没有Maven或ANT的JAXB插件一起使用?

WsImport用来从远程WSDL文件生成一些Java源代码.请注意,这是来自常规Scala项目,即它不是在Maven或Ant构建中完成的:

import com.sun.tools.ws.WsImport

def run(wsdlFile: File, destination: File, packageName: String = "generated"): Seq[File] = {        
  sys.props("javax.xml.accessExternalDTD") = "all"
  sys.props("javax.xml.accessExternalSchema") = "all"
  val xjcArgs = "" //TODO
  val args = s"-Xnocompile -XadditionalHeaders $xjcArgs -J-Djavax.xml.accessExternalDTD=all -b http://www.w3.org/2001/XMLSchema.xsd -p $packageName -s $destination $wsdlFile"
  WsImport.doMain(args.split(' '))
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好,我用它从上面的Scala代码以编程方式生成Java WSDL客户端.

但是,现在,我还想使用一些WsImport插件(例如thisthis):

val xjcArgs = "-B-Xequals -B-XhashCode -B-Xvalue-constructor"
Run Code Online (Sandbox Code Playgroud)

我收到此错误:no such JAXB option: -Xequals即使我将以下内容添加到我的类路径中:

"org.jvnet.jaxb2_commons" % "jaxb2-basics" % "1.11.1",
"org.jvnet.jaxb2_commons" % "jaxb2-value-constructor" % "3.0",
Run Code Online (Sandbox Code Playgroud)

如何强制WsImport使用这些插件?或者我是否直接使用除WsImport(如ANT)之外的其他工具?

尝试使用ANT

我在com.sun.tools.ws.WsImport上面使用,但也有另一个 …

java jaxb jaxb2 wsimport jaxb2-basics

11
推荐指数
1
解决办法
1732
查看次数

"便携式"JAX-WS客户端

我部署了一个JAX-WS服务并使用wsimport生成客户端代码.因为我在localhost上运行wsimport,所以我在"localhost"地址上使用binind获取了客户端代码.

但我想在其他使用公共IP yyyy访问我部署的服务的计算机上重用这些客户端代码.如何动态使用这些(一次)生成的客户端代码来访问我的服务.(服务的IP可能会改变......)

wsdl dynamic jax-ws endpoints wsimport

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

如何使用wsimport生成wsdl需要身份验证的Web服务客户端?

我正在尝试使用wsimport生成一个webservice客户端,但wsdl需要身份验证.

我正在使用这样的命令:wsimport https:// username:password @ url?wsdl

但它不起作用.

authentication web-services wsimport

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

服务器需要客户端证书时如何使用wsimport?

我有一个使用相互SSL身份验证的Web服务.当我安装了客户端证书时,我可以在浏览器中正常访问它.

我需要能够使用它wsimport来生成访问服务的Java代码.

如何设置我的凭据以便我可以使用wsimport

这是我正在尝试的一个例子,但由于无法进行身份验证而超时.

wsimport ./sample.wsdl -p com.company.ws.sample -Xnocompile -d ./src -extension -keep -XadditionalHeaders

谢谢你的帮助

编辑:

这就是wsimport印刷品.WSDL绝对有效,在给定的位置,这是一个确定如何传递我的凭据进行身份验证的问题:

wsimport https://wsdl.location.com?WSDL -p com.company.ws.sample -Xnocompile 
-d ./src -extension -keep -XadditionalHeaders


parsing WSDL...

[ERROR] Received fatal alert: handshake_failure

Failed to read the WSDL document: "https://wsdl.location.com?WSDL", because 1) could 
not find the document; /2) the document could not be read; 3) the root element of 
the document is not <wsdl:definitions>.

[ERROR] failed.noservice=Could not find wsdl:service in the provided WSDL(s): …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws wsimport

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

关于SOAP请求客户端的wsimport vs wsld2java

我刚刚使用wdmport的jdk1.7生成了java源文件来构建Web服务客户端.

wsimport -keep /path/to/wsdl
Run Code Online (Sandbox Code Playgroud)

为了生成SOAP请求,我在生成的文件夹下使用了clasess.一切顺利,回复200 :)

但是,我想使用(为......'有趣')CXF(v.2.7)wsdl2java工具使其完全相同,但使用此工具它不会生成SOAP请求所需的类,它不会t创建生成的文件夹.

wsdl2java -keep -verbose /path/to/wsdl
Run Code Online (Sandbox Code Playgroud)

另外我注意到工具自己创建的类ObjectFactory是不同的.使用wsdl2java创建一个很短的文件.

那么,为什么这些工具会产生不同的结果?

我不明白这两者的区别,你能帮帮我吗?

使用的WSDL导入XSD文件,这有一个众所周知的问题,我已经解决了感谢这个博客条目 这里

感谢您的回答

soap web-services cxf wsdl2java wsimport

10
推荐指数
0
解决办法
2780
查看次数

如何超越gradle wsimport任务JDK 8访问限制?

我的gradle构建中有一个wsimport任务正常工作,直到Java 7:

task wsimport {
    ext.destDir = file("${buildDir}/generated/java")
    ext.wsdlSrc = file("src/main/resources/schema/example/my.wsdl")
    ext.bindingSrc = file("src/main/resources/schema/example/bindings.xsd")
    outputs.dir destDir
    doLast {
        ant {
            destDir.mkdirs()
            taskdef(name: 'wsimport',
                classname: 'com.sun.tools.ws.ant.WsImport',
                classpath: configurations.jaxws.asPath)
            wsimport(keep: true,
                package: 'net.example.my',
                xnocompile: true,
                quiet: true,
                sourcedestdir: destDir,
                wsdl: wsdlSrc,
                binding: bindingSrc,
                encoding: "UTF-8"
            )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

切换到JDK 8(build 1.8.0-b129)时,出现以下错误:

java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: ... schema_reference:
Failed to read schema document 'xjc.xsd', because 'file' access is not allowed due to restriction set by the accessExternalSchema property.
Run Code Online (Sandbox Code Playgroud)

搜索问题我发现了以下帖子(令人惊讶地描述了Java 7的问题):https://github.com/stianh/gradle-jaxb-plugin/issues/20 …

wsimport gradle java-8

9
推荐指数
1
解决办法
4589
查看次数

用JDK 11替换wsimport

我当前正在开发一个需要wsimport的项目,但是我们使用的是JDK11,我刚刚发现从此版本开始,wsimport已从JDK中删除。

我搜索了答案,并尝试添加此依赖关系,但目前无法正常工作。

     <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.2.11</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

有什么我不知道的wsimport替代品吗?

谢谢 !

java spring wsimport

9
推荐指数
3
解决办法
7801
查看次数