`
步行者
  • 浏览: 169782 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用 WSDL4J 创建 WSDL

阅读更多

使用 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>
 

 

分享到:
评论
6 楼 shenning4321 2011-12-07  
请问一下  我怎么把生成的wsdl写入一个文件中
5 楼 jkleeo 2010-03-05  
用AXIS根据WSDL生成代码,需要用到WSDL.
没有WSDL,WS就没办法工作.
4 楼 步行者 2009-08-20  
641216927 写道
请问一下,自己创建WSDL的意义何在??

在开发 Web Service 框架 的时候可能会用到
3 楼 641216927 2009-08-20  
请问一下,自己创建WSDL的意义何在??
2 楼 步行者 2009-07-08  
whatwhat 写道
曾经用wsdl4j解析过wsdl
没用它创建过,
自动创建wsdl的情况应该很少
axis,xfire,cxf 这些框架应该用到了这种功能

恩,确实很少用到
java 的一些 web service 框架 应该都用到了这种功能
1 楼 whatwhat 2009-07-08  
曾经用wsdl4j解析过wsdl
没用它创建过,
自动创建wsdl的情况应该很少
axis,xfire,cxf 这些框架应该用到了这种功能

相关推荐

    wsdl4j 解析wsdl 文件

    1. **WSDL4J作用**:WSDL4J提供了一套API,允许开发者读取、创建和修改WSDL文档。它支持WSDL 1.1规范,并且可以与SOAP和HTTP等协议配合使用。 2. **主要功能**:除了基本的解析功能,WSDL4J还支持构建新的WSDL文档...

    wsdl4j api

    WSDL4J提供了API,使得开发人员可以创建、读取、修改和保存WSDL文档,从而更好地支持Web服务的开发、集成和测试。 **核心概念和功能:** 1. **WSDL模型**:WSDL4J提供了一个完整的WSDL模型,将WSDL文档解析为一系列...

    wsdl4j-bin-1.6.3.zip

    2. **构建WSDL文档**:除了解析,Wsdl4j还允许开发者创建和修改WSDL文档。开发者可以通过API动态构建服务接口,定义消息交换模式,并生成相应的WSDL描述。 3. **绑定和扩展机制**:Wsdl4j提供了一种机制,使得...

    wsdl4j-1.5.2

    WSDL4J是一个Java库,它允许开发人员在Java应用程序中解析、创建和操作WSDL文档。该库在版本wsdl4j-1.5.2中提供,为开发者提供了处理WSDL文件的强大工具。 **一、WSDL4J的核心功能** 1. **WSDL解析**:WSDL4J能够...

    wsdl4j.jar axis.jar

    当涉及到`wsdl2j`时,这是一个工具,它使用wsdl4j库将WSDL文件转换为Java源代码,生成的服务代理类可以直接在Java应用程序中使用,简化了调用Web服务的过程。通过这个工具,开发者可以避免手动编写繁琐的SOAP请求和...

    AxisLib1.4.rar(包括wsdl4j)

    在实际应用中, Axis与wsdl4j结合使用,可以实现以下功能: 1. **Web服务的生成和消费**:使用Axis,开发者可以从现有的Java类自动生成WSDL文件,或者根据WSDL文件自动生成Java客户端和服务端代码。 2. **WSDL处理**...

    webservice-xfire相关(xfire&wsdl4j;&jaxrpc;&jdom;)

    开发者可以使用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

    标题中的"axis1.4.jar、wsdl4j.jar和jaxrpc.jar"是与Web服务开发密切相关的Java库,主要用于创建和使用SOAP(Simple Object Access Protocol)服务。这些JAR文件是Axis1版本的一部分,Axis是Apache软件基金会的一个...

    wsdl4j.zip

    **标题解析:** "wsdl4j.zip" 这个标题指的是一个压缩包文件,其中包含的是wsdl4j的相关内容。WSDL4J是一个Java库,专门用于处理Web服务描述语言(WSDL)。WSDL是一种XML格式,用于定义网络服务的接口,包括消息格式...

    wsdl4j-1.6.2.jar和commons-discovery-0.4.jar.rar

    WSDL4J是Java社区对WSDL规范的实现,它提供了API来创建、解析和修改WSDL文件。开发者可以使用这个库来动态生成或解析服务描述,这对于自动化Web服务的部署和测试非常有用。WSDL4J支持WSDL 1.1规范,同时兼容SOAP、...

    javax.wsdl_1.6.2.v201012040545.jar

    开发者可以使用这些类来创建、修改和读取WSDL文件。 3. **WSDL的使用场景**:在开发Web服务时,如果需要定义服务接口,或者需要消费已有的Web服务,都会用到WSDL。通过javax.wsdl库,开发者可以动态生成或解析WSDL...

    Java解析wsdl文档获取具体的方法与参数

    3. **使用`Service`类**:通过`javax.xml.ws.Service`类的静态工厂方法`create`,传入WSDL的URL和QName(命名空间+服务名),创建服务实例。 ```java import javax.xml.ws.Service; import java.net.URL; URL wsdl...

    wsdl例子wsdl例子wsdl例子

    1. **服务发布**:服务提供者创建WSDL文件,描述服务的功能和接口,然后将WSDL发布到可访问的位置,以便服务消费者发现和使用。 2. **服务消费**:服务消费者通过获取WSDL文件,了解服务的使用方法,然后根据WSDL...

    javax.wsdl_1.6.2.v201012040545.jar.zip

    这个特定的版本"1.6.2.v201012040545"是针对WSDL 1.1规范的,发布于2010年12月4日,版本号为1.6.2。 描述中提到的同样是这个文件,说明这是一个用于处理WSDL的库,可能包含类、接口和其他资源,用于在Java应用程序...

    java解析wsdl示例-详细版

    - 使用`wsdl2java`命令行工具或在代码中调用`Wsdl2Java`类,将WSDL转换为Java类。 - 这将生成一个服务代理类,你可以通过它调用Web服务的方法。 2. **解析WSDL获取方法与参数**: - WSDL包含`&lt;portType&gt;`元素,...

    根据wsdl使用gsoap生成的服务器和客户端

    -j -C myservice.wsdl` - 这会生成一个包含服务接口、数据结构和其他辅助文件的目录结构。 - 实现服务操作,即在生成的`.h`文件中声明的函数。 - 编译生成的代码和你的服务实现,并链接到gSOAP库。 4. **生成...

    ant.jar wsdl4j-1.5.1.jar jaxrpc.jar jasper-jdt.jar

    WSDL4J提供了API来解析、创建和操作WSDL文件,使得开发者可以轻松地在Java应用程序中使用和生成Web服务。 3. **jaxrpc.jar**:Java API for XML-based RPC (JAX-RPC) 是一个标准API,它简化了Web服务的客户端和...

    根据wsdl 用ant生成jar和客服端java代码

    WSDL文件是一种XML格式的文档,它描述了服务的位置、使用的消息协议以及如何调用这些服务。在本案例中,我们将探讨如何利用Apache Ant工具和Axis库,根据WSDL文件自动生成Java客户端代码和JAR包。 Apache Ant是一个...

    wsdl和uddi的资料

    开发者可以使用Wsdl4j来生成客户端代理类,这使得调用Web服务就像调用本地方法一样简单。 **在实际应用中,WSDL和UDDI一起工作**,使得服务提供者能够轻松地发布其服务,而服务消费者则可以通过查找UDDI目录,快速...

    activation,axis,commons-logging,jaxrpc,mail,saaj,wsdl4j

    9. **wsdl4j.jar**:WSDL4J是一个开源库,实现了WSDL 1.1规范,用于处理WSDL文档,包括读取、写入和操作WSDL定义。它是构建和解析Web服务接口定义的关键工具。 这些`jar`包的组合使用,通常意味着项目涉及到Web服务...

Global site tag (gtag.js) - Google Analytics