JAVA6开发WebService (二)――JAX-WS (二)

2014-11-24 08:26:37 · 作者: · 浏览: 1
ln("{" + 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 {
// 输出接收到的附件
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接口的全路径名,当实现类实现了多个接 口时,需要通过此属性标注哪个类是WebService的服务端点接口(SEI)。
在这个类中,通过@Resource注解注入了一个WebServiceContext对象,这个对象即是WebService的上下文环境。

发布这个服务:

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”生成客户端代码,拷贝到工程相应文件夹里,这时,就可以调用这个服务了:

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.Data