packagecom.weather;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.HttpURLConnection;importjava.net.URL;importjavax.xml.bind.JAXBContext;importjavax.xml.bind.Marshaller;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.soap.MessageFactory;importjavax.xml.soap.SOAPBody;importjavax.xml.soap.SOAPConstants;importjavax.xml.soap.SOAPEnvelope;importjavax.xml.soap.SOAPMessage;importorg.w3c.dom.Document;public classWeatherWebServiceTest {public static voidmain(String[] args) {//TODO Auto-generated method stub
weather();
}static voidweather(){
System.out.println("开始登陆...");
String wsdl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
System.out.println("wsdl:"+wsdl);
HttpURLConnection urlconn=null;
InputStream ins=null;
OutputStream ous=null;try{
URL u=newURL(wsdl);
urlconn=(HttpURLConnection)u.openConnection();
urlconn.setDoOutput(true);
urlconn.setRequestMethod("POST");
urlconn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");//urlconn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");//发送数据
ous=urlconn.getOutputStream();
Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();//编组
Marshaller marsh=JAXBContext.newInstance(CityReq.class).createMarshaller();
CityReq xmlf=newCityReq();
xmlf.setTheCityName("北京");//JAXB.marshal(xmlf, new PrintWriter(System.out));
marsh.marshal(xmlf, document);//创建soapmessage对象
SOAPMessage soapMessage=MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();
SOAPBody soapBody=soapMessage.getSOAPBody();
soapBody.addDocument(document);
SOAPEnvelope soapEnvelope=soapMessage.getSOAPPart().getEnvelope();
soapEnvelope.removeNamespaceDeclaration("env");
soapEnvelope.addNamespaceDeclaration("soap12", "http://www.w3.org/2003/05/soap-envelope");
soapEnvelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
soapEnvelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
soapEnvelope.setPrefix("soap12");
soapEnvelope.removeChild(soapEnvelope.getHeader());
soapBody.setPrefix("soap12");//发送数据
soapMessage.writeTo(ous);//soapMessage.writeTo(System.out);
System.out.println(urlconn.getResponseCode());
System.out.println(urlconn.getResponseMessage());//接收数据
ins=urlconn.getInputStream();//接收的数据需要解组?
StringBuffer respMsg=newStringBuffer();byte[] bytes=new byte[1024*1024];int a=-1;while ((a=ins.read(bytes))!=-1) {
respMsg.append(new String(bytes,0,a));
}
System.out.println(respMsg.length());
System.out.println(respMsg);//解组的方式
/*SOAPMessage responseMessage=MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(null, ins);
Unmarshaller unmarsh=JAXBContext.newInstance(CityResp.class).createUnmarshaller();
JAXBElement reponse= unmarsh.unmarshal(responseMessage.getSOAPBody().extractContentAsDocument(), CityResp.class);
CityResp uresp= reponse.getValue();
System.out.println(uresp.getResult());*/ous.close();
ins.close();
urlconn.disconnect();
}catch(Exception e) {
e.printStackTrace();
}finally{
}
}
}