使用 WSDL4J 创建 WSDL
WSDL4J : WSDL For JAVA Toolkit,
顾名思义,是一个解析和创建WSDL的 JAVA类库(工具包)。
用WSDL4J来解析WSDL的例子比较多,这里不再赘述,
但用WSDL4J来创建WSDL的例子却很少,前几天根本没找到这方面的例子,
好不容易找到一个 还是在 JSR 110(Java APIs for WSDL) 的官方文档上看到的,
看来使用WSDL4J来创建WSDL 的情况比较少,
在开发 Web Service 框架 的时候可能会用到。
使用 WSDL4J 来创建 WSDL 并没有想象中的那么美!!!
下面是一个示例,在本人认为 容易出错 或 容易困惑 的地方做了一些注释。
public class CreateWsdl {
public static void main(String[] args) throws WSDLException{
String tns = "http://test.org/Hello";
String xsd = "http://www.w3.org/2001/XMLSchema";
WSDLFactory wsdlFactory = WSDLFactory.newInstance();
// 创建一个 WSDL definition
Definition definition = wsdlFactory.newDefinition();
// 设置 targetNamespace
definition.setTargetNamespace(tns);
definition.setQName(new QName(tns,"Hello"));
// 添加命名空间 (一些常用的命名空间)
definition.addNamespace("tns", tns);
definition.addNamespace("xsd", xsd);
definition.addNamespace("wsdlsoap", "http://schemas.xmlsoap.org/wsdl/soap/");
definition.addNamespace("soapenc11", "http://schemas.xmlsoap.org/soap/encoding/");
definition.addNamespace("soapenc12", "http://www.w3.org/2003/05/soap-encoding");
definition.addNamespace("soap11", "http://schemas.xmlsoap.org/soap/envelope/");
definition.addNamespace("soap12", "http://www.w3.org/2003/05/soap-envelope");
//创建 Part
Part part1 = definition.createPart();
part1.setName("part");
//设置 part1 的 Schema Type 为 xsd:string
part1.setTypeName(new QName(xsd,"string"));
Part part2 = definition.createPart();
part2.setName("part");
//设置 part2 的 Schema Type 为 xsd:string
part2.setTypeName(new QName(xsd,"string"));
//创建消息(Message)
Message message1 = definition.createMessage();
message1.setQName(new QName(tns,"helloRequest"));
//为 message 添加 Part
message1.addPart(part1);
message1.setUndefined(false);
Message message2 = definition.createMessage();
message2.setQName(new QName(tns,"helloResponse"));
message2.addPart(part2);
message2.setUndefined(false);
definition.addMessage(message1);
definition.addMessage(message2);
//创建 portType
PortType portType = definition.createPortType();
portType.setQName(new QName(tns,"helloPortType"));
//创建 Operation
Operation operation = definition.createOperation();
operation.setName("hello");
//创建 Input,并设置 Input 的 message
Input input = definition.createInput();
input.setName("helloRequest");
input.setMessage(message1);
//创建 Output,并设置 Output 的 message
Output output = definition.createOutput();
output.setName("helloResponse");
output.setMessage(message2);
//设置 Operation 的输入,输出,操作类型
operation.setInput(input);
operation.setOutput(output);
operation.setStyle(OperationType.REQUEST_RESPONSE);
//这行语句很重要 !
operation.setUndefined(false);
portType.addOperation(operation);
portType.setUndefined(false);
definition.addPortType(portType);
//创建绑定(binding)
Binding binding = definition.createBinding();
binding.setQName(new QName(tns,"helloHttpBinding"));
//创建SOAP绑定(SOAP binding)
SOAPBinding soapBinding = new SOAPBindingImpl();
//设置 style = "document"
soapBinding.setStyle("document");
//设置 SOAP传输协议 为 HTTP
soapBinding.setTransportURI("http://schemas.xmlsoap.org/soap/http");
//soapBinding 是 WSDL 中的扩展元素,
//为 binding 添加扩展元素 soapBinding
binding.addExtensibilityElement(soapBinding);
//设置绑定的端口类型
binding.setPortType(portType);
//创建绑定操作(Binding Operation)
BindingOperation bindingOperation = definition.createBindingOperation();
//创建 bindingInput
BindingInput bindingInput = definition.createBindingInput();
bindingInput.setName("helloRequest");
//创建 SOAP body ,设置 use = "literal"
SOAPBody soapBody1 = new SOAPBodyImpl();
soapBody1.setUse("literal");
bindingInput.addExtensibilityElement(soapBody1);
BindingOutput bindingOutput = definition.createBindingOutput();
bindingOutput.setName("helloResponse");
SOAPBody soapBody2 = new SOAPBodyImpl();
soapBody2.setUse("literal");
bindingOutput.addExtensibilityElement(soapBody2);
//设置 bindingOperation 的名称,绑定输入 和 绑定输出
bindingOperation.setName("hello");
bindingOperation.setBindingInput(bindingInput);
bindingOperation.setBindingOutput(bindingOutput);
binding.addBindingOperation(bindingOperation);
//这行语句很重要 !
binding.setUndefined(false);
definition.addBinding(binding);
//创建 service
Service service = definition.createService();
service.setQName(new QName(tns,"helloService"));
//创建服务端口 port
Port port = definition.createPort();
//设置服务端口的 binding,名称,并添加SOAP地址
port.setBinding(binding);
port.setName("helloHttpPort");
SOAPAddress soapAddress = new SOAPAddressImpl();
soapAddress.setLocationURI("http://test.org/services/hello");
port.addExtensibilityElement(soapAddress);
service.addPort(port);
definition.addService(service);
//打印刚创建的 WSDL
WSDLWriter wirter = wsdlFactory.newWSDLWriter();
wirter.writeWSDL(definition, System.out);
}
}
输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="Hello" targetNamespace="http://test.org/Hello" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://test.org/Hello" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<wsdl:message name="helloResponse">
<wsdl:part name="part" type="xsd:string">
</wsdl:part>
</wsdl:message>
<wsdl:message name="helloRequest">
<wsdl:part name="part" type="xsd:string">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="helloPortType">
<wsdl:operation name="hello">
<wsdl:input name="helloRequest" message="tns:helloRequest">
</wsdl:input>
<wsdl:output name="helloResponse" message="tns:helloResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="helloHttpBinding" type="tns:helloPortType">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="hello">
<wsdl:input name="helloRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="helloResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="helloService">
<wsdl:port name="helloHttpPort" binding="tns:helloHttpBinding">
<wsdlsoap:address location="http://test.org/services/hello"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
分享到:
相关推荐
1. **WSDL4J作用**:WSDL4J提供了一套API,允许开发者读取、创建和修改WSDL文档。它支持WSDL 1.1规范,并且可以与SOAP和HTTP等协议配合使用。 2. **主要功能**:除了基本的解析功能,WSDL4J还支持构建新的WSDL文档...
WSDL4J提供了API,使得开发人员可以创建、读取、修改和保存WSDL文档,从而更好地支持Web服务的开发、集成和测试。 **核心概念和功能:** 1. **WSDL模型**:WSDL4J提供了一个完整的WSDL模型,将WSDL文档解析为一系列...
2. **构建WSDL文档**:除了解析,Wsdl4j还允许开发者创建和修改WSDL文档。开发者可以通过API动态构建服务接口,定义消息交换模式,并生成相应的WSDL描述。 3. **绑定和扩展机制**:Wsdl4j提供了一种机制,使得...
WSDL4J是一个Java库,它允许开发人员在Java应用程序中解析、创建和操作WSDL文档。该库在版本wsdl4j-1.5.2中提供,为开发者提供了处理WSDL文件的强大工具。 **一、WSDL4J的核心功能** 1. **WSDL解析**:WSDL4J能够...
当涉及到`wsdl2j`时,这是一个工具,它使用wsdl4j库将WSDL文件转换为Java源代码,生成的服务代理类可以直接在Java应用程序中使用,简化了调用Web服务的过程。通过这个工具,开发者可以避免手动编写繁琐的SOAP请求和...
在实际应用中, Axis与wsdl4j结合使用,可以实现以下功能: 1. **Web服务的生成和消费**:使用Axis,开发者可以从现有的Java类自动生成WSDL文件,或者根据WSDL文件自动生成Java客户端和服务端代码。 2. **WSDL处理**...
开发者可以使用WSDL4J来解析现有的WSDL,或者构建新的服务描述。 3. **JAX-RPC**: Java API for XML-Based RPC(JAX-RPC)是Java平台上的一项标准,用于构建基于SOAP的Web服务。它允许Java方法直接映射到SOAP消息...
标题中的"axis1.4.jar、wsdl4j.jar和jaxrpc.jar"是与Web服务开发密切相关的Java库,主要用于创建和使用SOAP(Simple Object Access Protocol)服务。这些JAR文件是Axis1版本的一部分,Axis是Apache软件基金会的一个...
**标题解析:** "wsdl4j.zip" 这个标题指的是一个压缩包文件,其中包含的是wsdl4j的相关内容。WSDL4J是一个Java库,专门用于处理Web服务描述语言(WSDL)。WSDL是一种XML格式,用于定义网络服务的接口,包括消息格式...
WSDL4J是Java社区对WSDL规范的实现,它提供了API来创建、解析和修改WSDL文件。开发者可以使用这个库来动态生成或解析服务描述,这对于自动化Web服务的部署和测试非常有用。WSDL4J支持WSDL 1.1规范,同时兼容SOAP、...
开发者可以使用这些类来创建、修改和读取WSDL文件。 3. **WSDL的使用场景**:在开发Web服务时,如果需要定义服务接口,或者需要消费已有的Web服务,都会用到WSDL。通过javax.wsdl库,开发者可以动态生成或解析WSDL...
3. **使用`Service`类**:通过`javax.xml.ws.Service`类的静态工厂方法`create`,传入WSDL的URL和QName(命名空间+服务名),创建服务实例。 ```java import javax.xml.ws.Service; import java.net.URL; URL wsdl...
1. **服务发布**:服务提供者创建WSDL文件,描述服务的功能和接口,然后将WSDL发布到可访问的位置,以便服务消费者发现和使用。 2. **服务消费**:服务消费者通过获取WSDL文件,了解服务的使用方法,然后根据WSDL...
这个特定的版本"1.6.2.v201012040545"是针对WSDL 1.1规范的,发布于2010年12月4日,版本号为1.6.2。 描述中提到的同样是这个文件,说明这是一个用于处理WSDL的库,可能包含类、接口和其他资源,用于在Java应用程序...
- 使用`wsdl2java`命令行工具或在代码中调用`Wsdl2Java`类,将WSDL转换为Java类。 - 这将生成一个服务代理类,你可以通过它调用Web服务的方法。 2. **解析WSDL获取方法与参数**: - WSDL包含`<portType>`元素,...
-j -C myservice.wsdl` - 这会生成一个包含服务接口、数据结构和其他辅助文件的目录结构。 - 实现服务操作,即在生成的`.h`文件中声明的函数。 - 编译生成的代码和你的服务实现,并链接到gSOAP库。 4. **生成...
WSDL4J提供了API来解析、创建和操作WSDL文件,使得开发者可以轻松地在Java应用程序中使用和生成Web服务。 3. **jaxrpc.jar**:Java API for XML-based RPC (JAX-RPC) 是一个标准API,它简化了Web服务的客户端和...
WSDL文件是一种XML格式的文档,它描述了服务的位置、使用的消息协议以及如何调用这些服务。在本案例中,我们将探讨如何利用Apache Ant工具和Axis库,根据WSDL文件自动生成Java客户端代码和JAR包。 Apache Ant是一个...
开发者可以使用Wsdl4j来生成客户端代理类,这使得调用Web服务就像调用本地方法一样简单。 **在实际应用中,WSDL和UDDI一起工作**,使得服务提供者能够轻松地发布其服务,而服务消费者则可以通过查找UDDI目录,快速...
9. **wsdl4j.jar**:WSDL4J是一个开源库,实现了WSDL 1.1规范,用于处理WSDL文档,包括读取、写入和操作WSDL定义。它是构建和解析Web服务接口定义的关键工具。 这些`jar`包的组合使用,通常意味着项目涉及到Web服务...