在 XML Schema和WSDL中使用名称空间

对于名称空间,理解了OO思想的人应该是比较简单的了,特别是对学过C++的人来说更是

如此;但很多看了我前面文章的朋友,在和我的交流中,好像对名称空间都不怎么清楚,

下面我们就来说说怎么样在 XML Schema和WSDL中使用名称空间.

先看看一段JAVA代码:
   package com.hongsoft.test.pkg1;
   import com.hongsoft.test.pkg2.Test1;
   import com.hongsoft.test.pkg2.Test2;
在这个文件中,我们把com.hongsoft.test.pkg2.Test1和

com.hongsoft.test.pkg2.Test2称为源类,把本类称为目标类,把

com.hongsoft.test.pkg1包下的其它类称为默认类.

然后我们看看一段名称空间在 XML Schema中的使用:
<schema targetNamespace='http://www.SampleStore.com/Account'
      xmlns='http://www.w3.org/1999/XMLSchema'
      xmlns:ACC= 'http://www.SampleStore.com/Account'
      xmlns:PART= 'http://www.PartnerStore.com/PartsCatalog'>
在这里,我们把xmlns:ACC= 'http://www.SampleStore.com/Account'和
      xmlns:PART= 'http://www.PartnerStore.com/PartsCatalog'称为源名称空间,

把targetNamespace='http://www.SampleStore.com/Account'称为目标名称空间,把

xmlns='http://www.w3.org/1999/XMLSchema'称为默认名称空间(我们没有为它取名).
聪明的你,已经大致知道名称空间是什么东东了吧?

schema已经在默认名称空间xmlns='http://www.w3.org/1999/XMLSchema'中定义了,所

以,这里不需要在它前面标明应该属什么名称空间;这,和我们在前面的JAVA代码中可以

直接使用本包下的其它类的方法一样.所以,在一般的情况下,定义XML Schema时,默认

名称空间都是xmlns='http://www.w3.org/1999/XMLSchema';当然,并没有规定一定要

这样.

好,然后我们看看在WSDL中怎么使用名称空间:
<definitions
      targetNamespace="http://loans.org/wsdl/loan-approval"
      xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
      xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"     
      xmlns:lns="http://loans.org/wsdl/loan-approval">
三个必须声明的外部名称空间是 WSDL、SOAP 和 XMLSchema
xmlns="http://schemas.xmlsoap.org/wsdl/"是WSDL默认名称空间
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 是SOAP名称空间,这里我们

是用做BPEL4WS,所以不需要该名称空间
xmlns:xsd="http://www.w3.org/2001/XMLSchema"是XMLSchema名称空间

聪明的你,已经知道怎么在XML Schema和WSDL中使用名称空间了吧?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WSDL 和 XSD 文件获取请求地址和接口的方式和方法都与语言和工具有关。一般来说,WSDL 文件定义了 Web 服务的接口和绑定,而 XSD 文件则定义了 Web 服务所使用XML 数据格式。 你可以使用一些工具来解析 WSDL 和 XSD 文件,例如 Apache CXF、JAX-WS、WSDL4J 等等。以 Java 为例,以下代码演示了如何使用 Apache CXF 来获取 WSDL 文件第一个服务的 endpoint address 和接口名称: ```java import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import org.apache.cxf.service.model.BindingOperationInfo; import org.apache.cxf.service.model.ServiceInfo; import javax.wsdl.*; import javax.wsdl.factory.WSDLFactory; import javax.wsdl.xml.WSDLReader; import java.io.File; import java.net.URL; public class WsdlXsdEndpointAddressExample { public static void main(String[] args) throws Exception { URL wsdlUrl = new URL("http://example.com/Service?wsdl"); WSDLFactory factory = WSDLFactory.newInstance(); WSDLReader reader = factory.newWSDLReader(); reader.setFeature("javax.wsdl.verbose", false); reader.setFeature("javax.wsdl.importDocuments", true); Definition definition = reader.readWSDL(wsdlUrl.toString()); Service service = definition.getServices().values().iterator().next(); String endpointAddress = ((Port) service.getPorts().values().iterator().next()).getAddress().getLocation(); System.out.println("Endpoint Address: " + endpointAddress); JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClient(endpointAddress); ServiceInfo serviceInfo = client.getEndpoint().getEndpointInfo().getService(); BindingOperationInfo bindingOperationInfo = serviceInfo.getBinding().getOperations().iterator().next(); String operationName = bindingOperationInfo.getOperationInfo().getName().getLocalPart(); System.out.println("Operation Name: " + operationName); File xsdFile = new File("schema.xsd"); URL xsdUrl = xsdFile.toURI().toURL(); client.getRequestContext().put("schema-validation-enabled", true); client.getRequestContext().put("schema-validation-type", "XMLSchema"); client.getRequestContext().put("schema-validation-file", xsdUrl.toString()); Object[] response = client.invoke(operationName, "Request Data"); System.out.println("Response: " + response[0]); } } ``` 在上面的示例代码,我们首先使用 WSDLReader 从 WSDL 文件读取服务定义,然后获取第一个服务的 endpoint address。然后,我们使用 JaxWsDynamicClientFactory 创建一个动态客户端,并从客户端获取服务信息和操作信息。接着,我们从 XSD 文件读取 XML Schema 定义,并将其设置为客户端的请求上下文。最后,我们调用操作并输出响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值