针对WebService使用Service类获取Port类的一个参数问题(java.net.MalformedURLException)

最后在学习WebService时,看到对于官方的例子是这样写的.

1
2
3
4
5
6
7
private static final QName PORT_NAME
= new QName( "http://server.hw.demo/" , "HelloWorldPort" );
Service service = Service.create(SERVICE_NAME);
String endpointAddress = "http://localhost:9000/helloWorld" ;
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
HelloWorld hw = service.getPort(HelloWorld. class );

注意看上面的PORT_NAME的定义,是一个QName,其就有namespaceURI和一个name值,而在使用serivce获取port时直接传递了接口名参数。
这样的例子是可以运行的,这就导致了本人在编写参考例子时,直接Copy了相应的代码,但是修改了各项名称,在运行时,即始终运行不起来,相应的错误为

1
java.net.MalformedURLException: Invalid address. Endpoint address cannot be null .

以上的错误直接让人找不到方向,而实际问题是,service根据所传递的信息,在只传递了接口信息时,会默认构建一个QName的信息,再从service中寻找,如果寻找不到,自然就会产生上面的错误了。
在官方的例子中,它会默认构建HelloWorldPort这样qname去寻找,而在进行service.add时,恰好添加的就是HelloWorldPort这个qname,那么就恰好寻找到了。

而我们的例子,由于做了很多处理,导致默认添加到service的port的name并不是Service.class.getName+Port的组合,那么自然就找不到相应的port了。而正确的做法,其实也很简单,就是在获取port的时候,手动地指定要获取port类的qname,如下所示:

1
2
3
QName userServicePortQName = new QName( "http://cxf.java.study.m_ylf.com/" , "abcPort" );
service.addPort(userServicePortQName, SOAPBinding.SOAP11HTTP_BINDING, "http://localhost:8080/userService" );
UserService userService = service.getPort(userServicePortQName, UserService.class);

即在往service时添加什么样的port,那么在获取时就使用什么样的qname。再一步理解,addPort这个方法就可以理解为以键值对的方式往service里追加port,那么在获取的时候自然就要提供相应的key值了。如果不提供,就会使用默认的生成策略创建一个key值,那这个key值与addPort使用的key值不一样的话,自然就会产生上面的错误了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Web服务是一种在网络上进行通信的技术,它使用一个称为SOAP(简单对象访问协议)的协议来传输数据。使用.NET Web服务时,我们可以通过自定义对象参数来传递数据。 自定义对象参数是指我们可以定义自己的类,在Web服务方法中使用这些类作为参数传递给其他应用程序。在定义自定义对象参数时,我们可以添加属性和方法来表示特定的数据和操作。 在.NET Web服务中传递自定义对象参数时,我们需要进行以下几个步骤: 1. 定义自定义对象类:我们首先需要定义自定义对象类,这个类包含我们需要传递的数据和相关操作的属性和方法。 2. 定义Web服务方法:我们需要在Web服务中定义一个方法,这个方法接受自定义对象作为参数,并且执行相关操作。在方法内部,我们可以通过访问自定义对象的属性和方法来操作传递的数据。 3. 调用Web服务方法:在应用程序中,我们可以通过创建Web服务代理来调用Web服务方法。我们可以使用代理对象来传递自定义对象参数,并且调用相关方法。 使用自定义对象参数可以使我们的Web服务更具灵活性和扩展性。通过传递自定义对象,我们可以将相关的数据和操作封装在一起,使得方法调用更简洁和可读性更好。 总之,.NET Web服务提供了一种方便的方式来在网络上进行通信。通过使用自定义对象参数,我们可以传递包含特定数据和操作的自定义对象,使得Web服务更加灵活和可扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值