??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产一区二区三区久久久蜜月,一区二区三区四区乱视频,精品久久久久久久久久ntr影视http://www.aygfsteel.com/dashi99/category/52044.html<div align="center"> <img height="50" width="200" name="welcome" src="http://www.aygfsteel.com/images/blogjava_net/majianan/14891/r_5858488902000cu2.gif"/> </div> <br/> <center><font size=4 >鱼离不开?但是没有说不d哪滴?</font></center>zh-cnWed, 27 Jun 2012 06:48:53 GMTWed, 27 Jun 2012 06:48:53 GMT60JAVA6开发WebService Q二Q——JAX-WShttp://www.aygfsteel.com/dashi99/archive/2012/06/27/381597.htmlゞ沉默是金ゞゞ沉默是金ゞWed, 27 Jun 2012 06:06:00 GMThttp://www.aygfsteel.com/dashi99/archive/2012/06/27/381597.htmlhttp://www.aygfsteel.com/dashi99/comments/381597.htmlhttp://www.aygfsteel.com/dashi99/archive/2012/06/27/381597.html#Feedback0http://www.aygfsteel.com/dashi99/comments/commentRss/381597.htmlhttp://www.aygfsteel.com/dashi99/services/trackbacks/381597.html

    上一写了个最单的例子,只是Z说明JAVA6开发Web Service很方便,q一稍微深入一点,写个E微有点代表性的例子?/p>

    依然使用 JAX-WSQjdk自带的实玎ͼ方式Q这ơ要在服务中使用一个复杂类型CustomerQƈ实现附g传输的功能,q里使用MTOM的附件传输方式。MTOMQSOAP Message Transmission Optimization MechanismQ是SOAP 消息传输优化机制QMTOM可以在SOAP 消息中发送二q制数据?

先来看Customerc:


package org.duke.jaxws.server;

import java.util.Date;

import javax.activation.DataHandler;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlMimeType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name 
= "Customer")
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
    
private long id;
    
private String name;
    
private Date birthday;
    @XmlMimeType(
"application/octet-stream")
    
private DataHandler imageData;

    
public long getId() {
        
return id;
    }

    
public void setId(long id) {
        
this.id = id;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

    
public Date getBirthday() {
        
return birthday;
    }

    
public void setBirthday(Date birthday) {
        
this.birthday = birthday;
    }

    
public DataHandler getImageData() {
        
return imageData;
    }

    
public void setImageData(DataHandler imageData) {
        
this.imageData = imageData;
    }

}

     MTOM 方式中要传输的附件必M用javax.activation.DataHandler c,q要注意必须在类上用@XmlAccessorType(FIELD)注解Q标注JAXB 在进行JAVA 对象与XML 之间q行转换时只x字段Q而不x属性(getXXX()ҎQ,否则发布Web 服务时会报出C两个imageData 属性的错误Q原因未知,可能是BUG?/p>

    然后使用@XmlMimeType 注解标注q是一个附件类型的数据Q这里我们标注imageData 是一个二q制文gQ当然你也可以用具体的MIMEcdQ譬如:image/jpg、image/gif {,但要考虑到客L是否支持?/p>

接口c:


package org.duke.jaxws.server;

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.soap.MTOM;

@WebService(name 
= "Hello")
@SOAPBinding(style 
= SOAPBinding.Style.RPC)
@MTOM
public interface Hello {
    
public void printContext();

    
public Customer selectCustomerByName(
            @WebParam(name 
= "customer") Customer customer);

    
public Customer selectMaxAgeCustomer(Customer c1, Customer c2);
}

    @MTOM注解用于开启MTOM功能?/p>

    @WebService注解中的name属性标注在接口cMQ可以指定wsdl中接口名Uͼ也就是生成的客户端代码中接口cȝ名字?/p>

    @SOAPBinding(style = SOAPBinding.Style.RPC)指定SOAP消息样式Q有两个枚D|SOAPBinding.Style.DOCUMENTQ默认)?SOAPBinding.Style.RPCQ可以对比这两种方式生成的wsdl会有所不同Q而且生成的客L代码也会有所不同?/p>

实现c:


package org.duke.jaxws.server;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

@WebService(serviceName 
= "Hello", portName = "HelloPort", targetNamespace = "http://server.jaxws.duke.org/", endpointInterface = "org.duke.jaxws.server.Hello")
public class HelloImpl implements Hello {

    @Resource
    
private WebServiceContext context;

    @Override
    
public void printContext() {
        MessageContext ctx 
= context.getMessageContext();
        Set
<String> set = ctx.keySet();
        
for (String key : set) {
            System.out.println(
"{" + key + "," + ctx.get(key) + "}");
            
try {
                System.out.println(
"key.scope=" + ctx.getScope(key));
            } 
catch (Exception e) {
                System.out.println(key 
+ " is not exits");
            }
        }
    }

    @Override
    
public Customer selectCustomerByName(Customer customer) {
        
if ("duke".equals(customer.getName())) {
            customer.setId(
1);
            
try {
                customer.setBirthday(
new SimpleDateFormat("yyyy-MM-dd")
                        .parse(
"1985-03-14"));
            } 
catch (ParseException e) {
                e.printStackTrace();
            }
            customer.setImageData(
new DataHandler(new FileDataSource(new File(
                    
"c:" + File.separator + "duke.jpg"))));
        } 
else {
            customer.setId(
2);
            customer.setBirthday(
new Date());
            customer.setImageData(
new DataHandler(new FileDataSource(new File(
                    
"c:" + File.separator + "origin.jpg"))));
        }
        
return customer;
    }

    @Override
    
public Customer selectMaxAgeCustomer(Customer c1, Customer c2) {
        
try {
            
// 输出接收到的附g
            System.out.println("c1.getImageData().getContentType()="
                    
+ c1.getImageData().getContentType());
            InputStream is 
= c2.getImageData().getInputStream();
            OutputStream os 
= new FileOutputStream("c:\\temp1.jpg");
            
byte[] bytes = new byte[1024];
            
int c;
            
while ((c = is.read(bytes)) != -1) {
                os.write(bytes, 
0, c);
            }
            os.close();

            System.out.println(
"c2.getImageData().getContentType()="
                    
+ c2.getImageData().getContentType());
            is 
= c2.getImageData().getInputStream();
            os 
= new FileOutputStream("c:\\temp2.jpg");
            bytes 
= new byte[1024];
            
while ((c = is.read(bytes)) != -1) {
                os.write(bytes, 
0, c);
            }
            os.close();
        } 
catch (IOException e) {
            e.printStackTrace();
        }

        
if (c1.getBirthday().getTime() > c2.getBirthday().getTime()) {
            
return c2;
        } 
else {
            
return c1;
        }
    }
}

    @WebService注解的serviceName属性指定wsdl中service节点的name属性倹{portName属性指定wsdl?service节点下port节点name属性倹{targetNamespace属性指定wsdl根节点definitions?targetNamespace属性倹{endpointInterface属性指定要发布的WebService接口的全路径名,当实现类实现了多个接 口时Q需要通过此属性标注哪个类是WebService的服务端Ҏ口(SEIQ?/p>

    在这个类中,通过@Resource注解注入了一个WebServiceContext对象Q这个对象即是WebService的上下文环境?/p>

 

发布q个服务Q?/p>


package org.duke.jaxws.server;

import javax.xml.ws.Endpoint;

public class SoapServer {
    
public static void main(String[] args) {
        Endpoint.publish(
"http://localhost:8080/Service/Hello"new HelloImpl());
    }
}
在命令行键入“wsimport -s src -p org.duke.jaxws.client -keep http://localhost:8080/Service/Hello?wsdl”生成客户端代码,拯到工E相应文件夹里,q时Q就可以调用q个服务了:

package org.duke.jaxws.test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.namespace.QName;

import org.duke.jaxws.client.Customer;
import org.duke.jaxws.client.Hello;
import org.duke.jaxws.client.Hello_Service;

public class SoapClient {
    
public static void main(String[] args) throws ParseException,
            MalformedURLException {
        QName qName 
= new QName("http://server.jaxws.duke.org/""Hello");
        Hello_Service helloService 
= new Hello_Service(new URL(
                
"http://localhost:8080/Service/Hello?wsdl"), qName);
        Hello hello 
= (Hello) helloService.getPort(Hello.class);

        hello.printContext();

        System.out.println(
"########################################");

        Customer customer 
= new Customer();
        customer.setName(
"duke");
        DataSource ds 
= hello.selectCustomerByName(customer).getImageData()
                .getDataSource();
        String attachmentMimeType 
= ds.getContentType();
        System.out.println(attachmentMimeType);
        
try {
            InputStream is 
= ds.getInputStream();
            OutputStream os 
= new FileOutputStream(
                    
"c:\\Shawn\\duke-real_temp.jpg");
            
byte[] bytes = new byte[1024];
            
int c;
            
while ((c = is.read(bytes)) != -1) {
                os.write(bytes, 
0, c);
            }
        } 
catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(
"########################################");

        Customer c1 
= new Customer();
        c1.setId(
1);
        c1.setName(
"duke");
        GregorianCalendar calendar 
= (GregorianCalendar) GregorianCalendar
                .getInstance();
        calendar.setTime(
new SimpleDateFormat("yyyy-MM-dd").parse("1985-03-14"));
        
try {
            c1.setBirthday(DatatypeFactory.newInstance()
                    .newXMLGregorianCalendar(calendar));
        } 
catch (DatatypeConfigurationException e) {
            e.printStackTrace();
        }
        c1.setImageData(
new DataHandler(new FileDataSource(
                
"c:\\Shawn\\duke1.jpg")));

        Customer c2 
= new Customer();
        c2.setId(
2);
        c2.setName(
"abc");
        calendar.setTime(
new SimpleDateFormat("yyyy-MM-dd").parse("1986-03-14"));
        
try {
            c2.setBirthday(DatatypeFactory.newInstance()
                    .newXMLGregorianCalendar(calendar));
        } 
catch (DatatypeConfigurationException e) {
            e.printStackTrace();
        }
        c2.setImageData(
new DataHandler(new FileDataSource(
                
"c:\\Shawn\\duke-real_temp.jpg")));

        Customer c 
= hello.selectMaxAgeCustomer(c1, c2);
        System.out.println(c.getName());

    }
}






ゞ沉默是金ゞ 2012-06-27 14:06 发表评论
]]>
JAVA6开发WebService Q一Q?/title><link>http://www.aygfsteel.com/dashi99/archive/2012/06/27/381594.html</link><dc:creator>ゞ沉默是金ゞ</dc:creator><author>ゞ沉默是金ゞ</author><pubDate>Wed, 27 Jun 2012 04:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/dashi99/archive/2012/06/27/381594.html</guid><wfw:comment>http://www.aygfsteel.com/dashi99/comments/381594.html</wfw:comment><comments>http://www.aygfsteel.com/dashi99/archive/2012/06/27/381594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dashi99/comments/commentRss/381594.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dashi99/services/trackbacks/381594.html</trackback:ping><description><![CDATA[<div><span style="font-size: medium;">   </span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;"> WebService是SOA的一U较好的实现方式Q它应用程序的不同功能单元通过中立的契U(独立于硬件^台、操作系l和~程语言Q联pv来,使得各种形式的功能单元更好的集成?/span> <p><span style="font-size: small;">W3C对他的定义是Q?/span> </p> <p><span style="font-size: small;">    A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages......"</span> </p> <p><span style="font-size: small;">    Web service是一个Y件系l,Z支持跨网l的机器之间怺操作交互而设计。它有一个机器可识别的描q格式(特别是WSDLQ。不同的pȝ之间可以通过SOAP消息在规定的方式下相互调用。(英文不好Q请指正Q)</span> </p> <p><span style="font-size: small;"></span></p><p><span style="font-size: small;">    单的_WebService是一U独立于特定语言、特定^収ͼZ|络的、分布式的模块化lg。是一个能够用xml消息通过|络来访问的InterfaceQ这个Interface描述了一l可讉K的操作?/span> </p> <p><span style="font-size: small;">WebService一般分ZU:</span> </p> <p><span style="font-size: small;">    REST式WebServiceQ基于HTTP协议Q?/span> </p> <p><span style="font-size: small;">    RPC式WebServiceQ基于SOAP协议Q不qSOAP也是ZHTTP传输的?/span> </p> <p><span style="font-size: small;">  狭义上的WebService是指W二URPC式的WebServiceQ也是我们常说的U?/span> </p> <p><span style="font-size: small;">JAVA中有三种WebService规范Q分别是JAX-WSQJAX-RPCQ、JAX-RS、JAXM&SAAJ?/span> </p> <p><span style="font-size: small;">    q里先说JAX-WSQJava API For XML-WebServiceQ,JDK1.6 自带的版本ؓJAX-WS2.1Q其底层支持为JAXB。早期的JAVA Web服务规范JAX-RPCQJava API ForXML-Remote Procedure CallQ目前已l被JAX-WS 规范取代QJAX-WS 是JAX-RPC 的演q版本,但JAX-WS q不完全向后兼容JAX-RPC?/span> </p> <p><span style="font-size: small;">    废话不多说了Q先来写一个最单的例子Q?/span> </p> <p><span style="font-size: small;">服务器端Q?/span> </p> <p><span style="font-size: small;">    </span> <span style="font-size: small;">在想要发布ؓWebService的类上加上注解@WebServiceQ这个类的方 法就变ؓWebService的方法了Q再通过Endpoint的publishҎQ发布这个服务,到此Q一个最单的WebService搞定。运?mainҎQ在览器里输入”</span>http://localhost:8080/Service/Hello?wsdl <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;">“</span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;">会看C的WSDL信息?/span></p> <p> </p> <p><span style="font-size: small;"><br /></span> </p> <p><span style="font-size: small;">    </span> <span style="font-size: small;">不过需要注意一</span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;">下,</span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;"> </span> <span style="font-size: small;">有的同学如果不加@SOAPBinding(style = SOAPBinding.Style.RPC)q行代码会报错:</span> </p> <p><span style="font-size: small;">com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.why.webservice.jaxws.SayHello is not found. Have you run APT to generate them?</span> </p> <p><span style="font-size: small;">|上资料说只要将JDK升?.6u17可以了Q我直接升C1.6u25Q?/span>1.6.0_25-b06Q,问题解决Q?/p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000; "> org.duke.jaxws.server;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> javax.jws.WebService;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> javax.xml.ws.Endpoint;<br /><br />@WebService<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Hello {<br /><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> String sayHello(String name) {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">Hello </span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> name;<br />    }<br /><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args){<br />        Endpoint.publish(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://localhost:8080/Service/Hello</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Hello());<br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Success</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    }<br />}<br /></span></div><p> </p><div><p><span style="font-size: small;">客户端:</span> </p> <span style="font-size: small;">    在命令行输入命o wsimport -s[文g夹名] -p [包名] -keep [发布的服务地址?wsdl] 生成客户端代码,如生成本例的客户端代?#8221;<div>wsimport -s src -p org.duke.jaxws.client -keep http://localhost:8080/Service/Hello?wsdl",<span style="font-size: small;">当然Q前提是你已l配好了JAVA环境变量?/span><br /><div><span style="font-size: small;">利用q些生成的客L代码Q就可以调用q个WebService服务了:</span></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000; "> org.duke.jaxws.test;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> org.duke.jaxws.client.Hello;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> org.duke.jaxws.client.HelloService;<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> HelloClient {<br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args) {<br />        Hello hello </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> HelloService().getHelloPort();  <br />        String s </span><span style="color: #000000; ">=</span><span style="color: #000000; "> hello.sayHello(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">World!</span><span style="color: #000000; ">"</span><span style="color: #000000;">);  <br />        System.out.println(s); <br />    }<br /><br />}<br /></span></div></div></span></div><p> </p><p> </p><div><span style="font-size: small;">执行代码Q输出:Hello World!</span></div><br /><p> </p><p><br /></p><p> </p></div><img src ="http://www.aygfsteel.com/dashi99/aggbug/381594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dashi99/" target="_blank">ゞ沉默是金ゞ</a> 2012-06-27 12:38 <a href="http://www.aygfsteel.com/dashi99/archive/2012/06/27/381594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¯</a>| <a href="http://" target="_blank">ʼ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">մ</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">¸</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank">ڽ</a>| <a href="http://" target="_blank">䰲</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³</a>| <a href="http://" target="_blank">IJ</a>| <a href="http://" target="_blank">˫</a>| <a href="http://" target="_blank">潭</a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank">°</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">е</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank">Ӫ</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƶ</a>| <a href="http://" target="_blank">ͼƬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>