ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – wsimport工具在生成的客户端代码中转换DataHandler类型byte []

2019-07-29 17:01:07  阅读:351  来源: 互联网

标签:java jaxb jax-ws web-services


我有一个使用JAXWS开发的简单WebService.我需要上传/下载一些文件.我创建了一个带有DataHandler属性的类FileItem.服务运行正常.

但是当我使用wsimport工具生成客户端存根时,FileItem类具有byte []类型属性而不是DataHandler类型.

如何自定义此行为,以便生成的代码在生成的客户端代码中也具有相同的DataHandler类型?

解决方法:

简答

如果在除以下内容之外的任何元素上指定xmime:expectedContentTypes:image / gif,image / jpeg,text / xml或application / xml,则生成的属性将为DataHandler类型.

答案很长

从章节H.2.1.1绑定JAXB 2.2规范的已知媒体类型,下面是mime类型如何对应于生成的Java类型.

MIME Type              Java Type
---------              -------------
image/gif              java.awt.Image
image/jpeg             java.awt.Image
text/xml               javax.xml.transform.Source
application/xml        javax.xml.transform.Source
any other mime type    javax.activation.DataHandler

XML Schema

下面是一个XML模式,其中包含许多类型为base64Binary的元素,其中大多数都使用xmime:expectedContentTypes限定,以便我们可以看到对生成的类生成的影响.

<?xml version="1.0"?>
<xsd:schema
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
    xmlns="http://www.example.com"
    targetNamespace="http://www.example.com">
    <xsd:element name="root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element minOccurs="0" name="default" type="xsd:base64Binary"/>
                <xsd:element minOccurs="0" name="imageGif" type="xsd:base64Binary" xmime:expectedContentTypes="image/gif"/>
                <xsd:element minOccurs="0" name="imageJpeg" type="xsd:base64Binary" xmime:expectedContentTypes="image/jpeg"/>
                <xsd:element minOccurs="0" name="textXml" type="xsd:base64Binary" xmime:expectedContentTypes="text/xml"/>
                <xsd:element minOccurs="0" name="applicationXml" type="xsd:base64Binary" xmime:expectedContentTypes="application/xml"/>
                <xsd:element minOccurs="0" name="anythingElse" type="xsd:base64Binary" xmime:expectedContentTypes="anything/else"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

根(生成的类)

下面是生成的类.结果属性类型是byte [],Image,Source和DataHandler.

package com.example;

import java.awt.Image;
import javax.activation.DataHandler;
import javax.xml.bind.annotation.*;
import javax.xml.transform.Source;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "_default",
    "imageGif",
    "imageJpeg",
    "textXml",
    "applicationXml",
    "anythingElse"
})
@XmlRootElement(name = "root")
public class Root {

    @XmlElement(name = "default")
    protected byte[] _default;
    @XmlMimeType("image/gif")
    protected Image imageGif;
    @XmlMimeType("image/jpeg")
    protected Image imageJpeg;
    @XmlMimeType("text/xml")
    protected Source textXml;
    @XmlMimeType("application/xml")
    protected Source applicationXml;
    @XmlMimeType("anything/else")
    protected DataHandler anythingElse;


    ...
}

标签:java,jaxb,jax-ws,web-services
来源: https://codeday.me/bug/20190729/1573496.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有