我正在尝试为客户端(也称为消费者)生成我需要的java帮助类,用于我们公司网络外部的受SSL保护的Web服务(在Microsoft Biztalk上).我们只能通过代理访问它,我们无法改变Webservice本身的任何信息.
这是我提供给wsimport工具的命令:
wsimport -keep -httpproxy:theProxy.net:8080 -s c:\generatedWebService_wsImport\ -p the.java.package.I.want.to.call.it -Xauthfile c:\generatedWebService_wsImport\auth https://meldeservice-test.oekb.at/Meldeservice/WebService_at_oekb_biztalk_MeldeService.asmx?WSDL
Run Code Online (Sandbox Code Playgroud)
而这是我的身份验证文件的内容:
https://user:pwd@meldeservice-test.oekb.at:8080/Meldeservice/WebService_at_oekb_biztalk_MeldeService.asmx?WSDL
Run Code Online (Sandbox Code Playgroud)
而这是我的错误:
[ERROR]服务器返回HTTP响应代码:401为URL:https://meldeservice-test.oekb.at/Meldeservice/WebService_at_oekb_biztalk_MeldeService.asmx?WSDL,"https://meldeservice-test.oekb.at/Meldeservice/WebService_at_oekb_biztalk_MeldeService. asmx?WSDL"需要授权,请在C:\ Documents and Settings\s6424.metro\auth提供具有读访问权限的授权文件,或使用-Xauthfile提供授权文件,并在每一行使用以下格式提供授权信息:http [s ]://用户名:密码@主机:端口//
当然,代理和凭证与本文中的不同.密码包含一个特殊字符!(感叹号).
在类似的条件下,有人可以帮助我做一个工作实例.我已经搜索了很多,但找不到任何可以帮助我的东西.
是否存在可下载的wsimport工具源代码?这将是最后的使用手段.
当我使用wsimport为某些服务生成代理时,每个端口的结果方法签名似乎不使用WSDL中指定的复杂类型; 但是我注意到它有一些其他服务.
这发生在多个服务上,但最近的例子是亚马逊的AWSEConsumerService(链接到WSDL).当我使用wsimport生成服务代理代码时,我获得了每个端口的方法签名,如下所示.
@WebMethod(operationName = "ItemLookup", action = "http://soap.amazon.com/ItemLookup")
@RequestWrapper(localName = "ItemLookup", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", className = "com.aws.CommerceService.ItemLookup")
@ResponseWrapper(localName = "ItemLookupResponse", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", className = "com.aws.CommerceService.ItemLookupResponse")
public void itemLookup(
@WebParam(name = "MarketplaceDomain", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
String marketplaceDomain,
@WebParam(name = "AWSAccessKeyId", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
String awsAccessKeyId,
@WebParam(name = "AssociateTag", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
String associateTag,
@WebParam(name = "Validate", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
String validate,
@WebParam(name = "XMLEscaping", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
String xmlEscaping,
@WebParam(name = "Shared", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
ItemLookupRequest shared, …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Dynamics CRM 4.0 Web服务.我做的第一件事是Java/JAX-WS基于webservice的WSDL为wsimport生成正确的类.在生成类时,我遇到了一些错误:
[ERROR] A class/interface with the same name
"com.microsoft.schemas.crm._2007.webservices.RetrieveResponse" is already in use. Use a class customization to resolve this conflict.
line 979 of file://src/main/webapp/WEB-INF/classes/META-INF/wsdl/CrmServiceWsdl.wsdl
[ERROR] (Relevant to above error) another "RetrieveResponse" is generated from here.
line 12274 of file://src/main/webapp/WEB-INF/classes/META-INF/wsdl/CrmServiceWsdl.wsdl
Run Code Online (Sandbox Code Playgroud)
979行告诉我们:
<s:element name="RetrieveResponse">
<s:complexType>
<s:sequence>
<s:element name="RetrieveResult" type="s3:BusinessEntity" />
</s:sequence>
</s:complexType>
</s:element>
Run Code Online (Sandbox Code Playgroud)
第12274行给了我们:
<s:complexType name="RetrieveResponse">
<s:complexContent mixed="false">
<s:extension base="tns:Response">
<s:sequence>
<s:element ref="s3:BusinessEntity" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
Run Code Online (Sandbox Code Playgroud)
两个部分都在同一名称空间中.两者都将生成为RetrieveResponse.class,因此它们会发生碰撞.我找到了这个问题的解决方案,即JAX-B绑定xml文件:
<bindings node="//xsd:complexType[@name='RetrieveResponse']">
<jaxb:class name="RetrieveResponseType"/>
</bindings>
Run Code Online (Sandbox Code Playgroud)
这有效(不确定这是否是正确的方法..?)..
所以在此之后,我成功地创建了一些成功的Web服务调用,这很棒! …
当目标wsdl/xsds放在某些特定路径下时,wsimport和xjc命令(两者都作为Java JDK的一部分下载)忽略了提供的jaxb绑定文件.
要重现此行为,可以使用路径C:\ a.该目录包含以下XSD文件:
nm.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="name.xsd"/>
<xs:annotation>
<xs:documentation xml:lang="en">Annotation</xs:documentation>
</xs:annotation>
<xs:element name="name" type="Name"/>
<xs:complexType name="FName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
name.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Name">
<xs:sequence>
<xs:element name="FirstName" type="FName"/>
<xs:element name="LastName" type="LName"/>
<xs:element name="Date" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
bindings.xjb:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc">
<jxb:globalBindings generateElementProperty="false" collectionType="indexed">
<jxb:javaType name="java.util.Date" xmlType="xs:date" parseMethod="com.company.Converter.parseDate" printMethod="com.company.Converter.printDate"/>
</jxb:globalBindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)
从C:\ a使用以下命令来生成JAXB工件:
xjc -b bindings.xjb nm.xsd
Run Code Online (Sandbox Code Playgroud)
绑定被忽略.生成的类仍使用xs:date而不是java.util.Date,并且未生成适配器类.将wsimport与导入XSD的wsdl一起使用时,问题也是可重现的. …
我当前正在开发一个需要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替代品吗?
谢谢 !
我来自C#所以我意识到我不能指望Java中存在很多(优秀的)可用性特性和功能,但我最近有点像这个Java项目,我根本无法想象这个.在C#/ .NET中,Web服务代理类和生成的数据契约是不可能的,但由于某种原因,Web服务的Java实现对我来说似乎并不合适.
这是交易......
我使用wsimport从.wsdl文件创建生成的.java文件.例如...
"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin ".\wsdl\MyWSDL.wsdl"
Run Code Online (Sandbox Code Playgroud)
我注意到这个硬编码(输入那个短语几乎让我呕吐)"wsdlLocation"作为wsdl的当前位置("C:\ Users\ME\etc\wsdl\MyWSDL.wsdl").所以我把它拿出来:
"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin -wsdllocation "NULL" ".\wsdl\MyWSDL.wsdl"
Run Code Online (Sandbox Code Playgroud)
现在,当我实例化生成的服务时......
MyService xyz = new MyService();
Run Code Online (Sandbox Code Playgroud)
我收到一个错误.有些东西沿着"找不到文件C:\ blahblah\Temp\NULL".好的......回到绘图板.在对此进行了一些调查后,我在Stack Overflow上发现了一篇帖子,其中讨论了使用"classpath:META-INF/WSDL.wsdl"作为wsdl位置.
"%JAVA_HOME%\bin\wsimport" ... -wsdllocation "classpath:WSDLs/MyWSDL.wsdl" ".\wsdl\MyWSDL.wsdl"
copy ".\wsdl\*" .\bin\WSDLs
cd bin
"%JAVA_HOME%\bin\jar" cf WebServiceProxies.jar *
Run Code Online (Sandbox Code Playgroud)
错误!
"Unknown protocol: classpath"
Run Code Online (Sandbox Code Playgroud)
奇怪的是,Stack Overflow上的帖子被标记为答案.我想有可能在过去的两年中,一个不错的数量已经改变到不再支持"classpath:"的地步,或者有另一种方法可以做到这一点,但我无法弄清楚/找到答案.
好的,所以我需要回答几个问题之一(先谢谢!!!!我在这里疯了!).
有没有办法让它在运行时不需要WSDL?对于它的价值,我认为当我实例化对象时它需要这个BS.有什么方法可以抑制这个要求?也许如果我使用不同的工具......?
如果此代码无法在运行时不需要WSDL,那么如何让它从包中获取此WSDL?我在wsdllocation参数中放入什么来使其从JAR文件中加载WSDL?
看起来每个人都说正确的吸气剂:
例:
public class Test {
private boolean primitive;
private Boolean object;
public boolean isPrimitive() {
return primitive;
}
public Boolean getObject() {
return object;
}
//..
}
Run Code Online (Sandbox Code Playgroud)
题:
是否有任何规范或文档声明这是正确的,这是为布尔值指定getter的方法?或者这只是一个常见的假设?
我问becouse例如的wsimport生成的getter 是布尔对象.这是一个工具错误,还是这是允许的和正确的?
另一方面,一些framweork与这样的吸气剂不能正常工作.例如JSF(EL)或Dozer.
当我使用Apache Axis生成webservice客户端存根时,我通过调用以下方法使用客户端存根在我的代码中禁用服务器证书信任检查
AxisProperties.setProperty("axis.socketSecureFactory",
"org.apache.axis.components.net.SunFakeTrustSocketFactory");
Run Code Online (Sandbox Code Playgroud)
如何禁用通过运行生成的客户端存根的信任检查wsimport?
我在运行一些测试代码时使用它.
我正在做一个WSDL客户端,想知道如何将XML元素设置为CDATA.
我正在使用它wsimport来生成源代码,CDATA元素是请求XML的一部分.这是请求的XML类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "dataRequest" })
@XmlRootElement(name = "ProcessTransaction")
public class ProcessTransaction {
protected String dataRequest;
public String getDataRequest() {
return dataRequest;
}
public void setDataRequest(String value) {
this.dataRequest = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了@XmlAdapter,但它在输出上没有任何改变......
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class AdaptorCDATA extends XmlAdapter<String, String> {
@Override
public String marshal(String arg0) throws Exception {
return "<![CDATA[" + arg0 + "]]>";
}
@Override
public String unmarshal(String arg0) throws Exception {
return arg0;
}
}
Run Code Online (Sandbox Code Playgroud)
在XML类中: …
我已经使用 wsimport 和其他 Metro 工具很多年了,但自从 Java 11 中删除了 Java EE 模块后,我找不到这些工具了。
我在哪里可以找到wsimport可执行文件?