当前位置: 首页 > news >正文

关于cxf生成客户端代码中的JAXBElementString

1、使用自动生成的java文件中的 ObjectFactory构造入参

关于cxf生成客户端代码中的JAXBElement<String>
    在使用cxf或者x-fire进行webservice开发时,从wsdl文件生成客户端代码时,如果有属性的类型是String,可能会出现JAXBElement<String>类型。
    为什么webservice客户端不直接使用String,而使用JAXBElement<String>类型,自然是有原因的,是因为服务器端的wsdl文件有nillable="true"这个属性。
   此时有两种方法对这个JAXBElement<String>类型赋值。
   1.

  1.  
    User user = new User();
  2.  
    JAXBElement<String> name = new JAXBElement<String>(new QName("http://memberService", "username"), String.class, "smallnest");
  3.  
    user.setUsername(name);


使用这种方法时,有很多人发现客户端的数据确实存入了,可是到了服务器端,通过.getUsername().getValue()调用时,却是null,原因就是Qname值不对!注意,在生成的客户端代码里有private static final QName SERVICE_NAME = new QName("xxx","xx");
并不是这个QName,真正的Qname要去ObjectFactory.java文件去找。只要QName写对,这种调用方法是可以的。
   2.当然,还有一种更简单的方法,直接使用ObjectFactory这个类来调用:

  1.  
    User user = new User();
  2.  
    ObjectFactory objFac= new ObjectFactory();
  3.  
    JAXBElement<String> name = objFac.createUserUsername( "smallnest");
  4.  
    user.setUsername(name);


这样就简便多了

 

 

2、生成代码时

 

使用的wsdl2java是cxf中的工具,cxf可以到apache下面下载

wsdl2java用法: 

wsdl2java -p com -d srcl  aa.wsdl 

-p  指定其wsdl的命名空间,也就是要生成代码的包名: 

-d  指定要产生代码所在目录 

-client 生成客户端测试web service的代码 

-server 生成服务器启动web  service的代码 

-impl 生成web service的实现代码 

-b  binding-file-name

 

如果直接使用wsdl2java.bat -client -d E:/tmp -frontend jaxws21 wsdl文件

生成的客户端代码中有JAXBElement<String>

 

使用wsdl2java.bat -b "1.txt" -client -d E:/tmp -frontend jaxws21 wsdl文件,就可以生成正常的pojo类

 

1.txt的文件内容为

 

[html]  view plain  copy
 
 
 
  在CODE上查看代码片派生到我的代码片
  1. <jaxb:bindings version="2.1"   
  2. xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"   
  3. xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"   
  4. xmlns:xs="http://www.w3.org/2001/XMLSchema">   
  5.    <jaxb:globalBindings generateElementProperty="false"/>   
  6. </jaxb:bindings>   

 

打包为jar

进入到tmp目录中

jar -cvf ***.jar .

 

原文地址:https://blog.csdn.net/z69183787/article/details/53505941

相关文章:

  • (转)Linux下编译安装log4cxx
  • Spring上传多文件并供下载
  • 解决Android LogCat 输出乱码的问题(转)
  • 原有vue项目接入typescript
  • Android软件开发-AnalogClock、DigitalClock
  • springboot分环境打包(maven动态选择环境)
  • CSS3 动画效果带来的bug
  • PI Square中文论坛: PI SDK 开发中级篇| PI Square
  • 解密回文——栈
  • Maven Docker部署
  • Django(六)模型(model)系统 -- 常用查询语法及进阶
  • Yii php 环境配置on ubuntu 12.04
  • 带动画的登录页面
  • JAVA中equal()和==的区别
  • 区块链软件公司:区块链技术能带来什么
  • Angular数据绑定机制
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ES10 特性的完整指南
  • JavaScript类型识别
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • VuePress 静态网站生成
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Zsh 开发指南(第十四篇 文件读写)
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 技术胖1-4季视频复习— (看视频笔记)
  • 老板让我十分钟上手nx-admin
  • 利用DataURL技术在网页上显示图片
  • 前端之React实战:创建跨平台的项目架构
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用 @font-face
  • 手机端车牌号码键盘的vue组件
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 网页视频流m3u8/ts视频下载
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​比特币大跌的 2 个原因
  • $.ajax()参数及用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (补)B+树一些思想
  • (四)模仿学习-完成后台管理页面查询
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .cfg\.dat\.mak(持续补充)
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net 发送邮件
  • .NET 服务 ServiceController
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 使窗口永不获得焦点
  • .pop ----remove 删除
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [bzoj1038][ZJOI2008]瞭望塔
  • [c#基础]DataTable的Select方法