AGoodEgg
这一路的风景!
这一路的风景!
一月 16th, 2012
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地 结合XML数据和处理函数。
java6中,作为标准,加入了对jaxb2.x的支持,相比1.x,使用更方便,生成的代码量也更简洁
java6中查看对jaxb的支持,命令行下输入:
xjc -version
output:
----------
xjc version "JAXB 2.1.10 in JDK 6"
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6)
通过XSD文件生成Java文件,这里以JPA配置文件为例:
xjc -p com.xxx.packagename -d e:/tmp/jaxb/src /orm_1_0.xsd
生成如下文件:
parsing a schema...
compiling a schema...
AccessType.java
AssociationOverride.java
AttributeOverride.java
Attributes.java
Basic.java
CascadeType.java
........
再通过JAXB解晰xml或生成xml代码如下:
//parse xml to java
String contentFile = "/entity-cfg.xml";
JAXBContext jaxbContext = JAXBContext.newInstance("com.xxx.xxxx",Xml2Java.class.getClassLoader());
StreamSource streamSource = new StreamSource(new FileReader(new File(contentFile)));
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
com.xxx.xxxx.EntityMappings entityMappings = (com.xxx.xxxx.EntityMappings)unmarshaller.unmarshal(streamSource);
List<com.xxx.xxxx.Entity> entitys = entityMappings.getEntity();
for(com.xxx.xxxx.Entity entity:entitys){
System.out.println(entity.getClazz());
}
//marshal java object to xml
Object o = entityMappings;
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
String xmlFile = "/em.xml";
marshaller.marshal(o, new FileOutputStream(xmlFile));
十二月 31st, 2011
package com.azulstudio.jwssample;
public interface IHello {
String sayHello(String name);
}
--------------------------------
package com.azulstudio.jwssample;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(name="IHello", serviceName="HelloService")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class HelloImpl implements IHello {
@WebMethod(operationName="sayHello")
public String sayHello(String name) {
System.out.println("HelloImpl.sayHello method called");
return "hello from server !!"+name;
}
}
--------------------------------------------------------------------
import javax.xml.ws.Endpoint;
import com.azulstudio.jwssample.HelloImpl;
import com.azulstudio.jwssample.IHello;
public class Test {
public static void main(String[] args) {
IHello iHello = new HelloImpl();
try{
Endpoint endpoint = Endpoint.publish("http://localhost:8080/Hello", iHello);
}
catch(Exception e){
e.printStackTrace();
}
}
}
----------------------------------------------------------------------------------------------------------
import java.io.OutputStream;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
public class TestClient {
public static void main(String[] args) throws Exception {
SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
SOAPConnection connection = factory.createConnection();
MessageFactory mFactory = MessageFactory.newInstance();
SOAPMessage message = mFactory.createMessage();
SOAPPart part = message.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();
SOAPHeader header = message.getSOAPHeader();
SOAPBody body = envelope.getBody();
SOAPHeaderElement headerElementRoot = header.addHeaderElement(new
QName("http://jwssample.azulstudio.com/", "c", "ns1"));
SOAPBodyElement bodyElementRoot = body.addBodyElement(new
QName("http://jwssample.azulstudio.com/", "sayHello", "ns1"));
bodyElementRoot.addChildElement(new QName("arg0")).addTextNode("fffffffffff");
SOAPMessage reMessage = connection.call(message, new URL("http://localhost:8080/Hello"));
OutputStream os = System.out;
reMessage.writeTo(os);
connection.close();
}
}
------------------------------------------------------------------------------------------------------------------------------------------------
针对Java 6 WS客户端及服务端的最简单实例
访问 http://localhost:8080/Hello?wsdl
WSDL文件如下:
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://jwssample.azulstudio.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://jwssample.azulstudio.com/" name="HelloService">
<types></types>
<message name="sayHello">
<part name="arg0" type="xsd:string"></part>
</message>
<message name="sayHelloResponse">
<part name="return" type="xsd:string"></part>
</message>
<portType name="IHello">
<operation name="sayHello">
<input message="tns:sayHello"></input>
<output message="tns:sayHelloResponse"></output>
</operation>
</portType>
<binding name="IHelloPortBinding" type="tns:IHello">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"></soap:binding>
<operation name="sayHello">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal" namespace="http://jwssample.azulstudio.com/"></soap:body>
</input>
<output>
<soap:body use="literal" namespace="http://jwssample.azulstudio.com/"></soap:body>
</output>
</operation>
</binding>
<service name="HelloService">
<port name="IHelloPort" binding="tns:IHelloPortBinding">
<soap:address location="http://localhost:8080/Hello"></soap:address>
</port>
</service>
</definitions>
十二月 27th, 2011
| 特殊字符 | 英文名 | 中文名 | 注解 |
| ~ | tilde | 波浪号 | |
| ` | back quote | 反引号 | 键盘上,用Shift + ~ 输入此字符 |
| ! | exclamation | 感叹号/惊叹号 | |
| @ | at | 一般读作“小老鼠” | 邮件地址中一般读作“小老鼠”或者直接像英文一样读作 “at” |
| # | number sign / pound / sharp / hash | 井号 | 英语国家是hash,美语是pound,音乐里作sharp,如C# |
| $ | dollar sign | 美元符号 | |
| % | percent | 百分号 | |
| ^ | caret | 脱字符号 / 插入符号 | |
| & | ampersand | 和 / 引用 | C语言中,读作“取地址,引用”,逻辑语言中,表示“与” |
| * | asterisk / star / multiply | 星号 | star(美语),数学公式中作multiply |
| ( | left parenthesis / opening parentheses | 左括号 / 开括号 | |
| ) | right parenthesis / close parentheses | 右括号 /闭括号 | |
| _ | underscore / underline | 下划线 | |
| - | minus / negative / dash / hyphen | 减号/负号/破折号/连字符 | 数学公式中作minus |
| + | plus / positive | 加号/正(数) | 数学公式中作positive |
| = | equal | 等于号/等号 | |
| { | left brace / opening brace | 左大括号 | |
| } | right brace / closing brace | 右大括号 | |
| [ | left bracket / opening bracket | 左中括号 | |
| ] | right bracket / closing bracket | 右中括号 | |
| | | bar / pipe / vertical bar | 竖线 | |
| \ | backslash / escape | 反斜杠 | |
| : | colon | 冒号 | |
| ; | semicolon | 分好 | |
| “ ” | double quote / quotation mark | 双引号 / 引号 | |
| ‘ ’ | (single) quote / apostrophe | 撇号 / 单引号 | |
| < | less | 小于号 | |
| > | greater | 大于号 | |
| , | Comma | 逗号 | |
| . | period / dot / point | 点 | |
| ? | question mark | 问号 | |
| / | slash / slant | 斜杠 | |
| … | ellipsis | 省略号 |
十一月 18th, 2011
JMS之于MQ正如JDBC之于各种DB
以下以activemq为例,记录集中发送和接收message的典型方式
发送
-----------------------------------------------------------------
public class JmsSender {
public static void main(String[] args) throws JMSException {
// ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://127.0.0.1:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
sendMsg(session, producer);
session.commit();
connection.close();
}
public static void sendMsg(Session session, MessageProducer producer) throws JMSException {
TextMessage message = session.createTextMessage("Hello ActiveMQ!");
producer.send(message);
System.out.println("");
}
}
接收
---------------------------------------------------------
public class JmsReceiver {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://127.0.0.1:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue");
MessageConsumer consumer = session.createConsumer(destination);
while (true) {
TextMessage message = (TextMessage) consumer.receive(1000);
session.commit();
if (null != message)
System.out.println("message received:" + message.getText());
else
break;
}
session.close();
connection.close();
}
}
通过spring模板类访问
---------------------------------------------------------
public static void main(String args[]) {
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:app*.xml");
JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
MapMessage mm = session.createMapMessage();
mm.setLong("count", new Date().getTime());
return mm;
}
});
}
--------------------------------------------
public static void main(String args[]){
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:app*.xml");
JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");
while(true) {
Map<String, Object> mm = (Map<String, Object>) jmsTemplate.receiveAndConvert();
System.out.println("message received:" + new Date((Long)mm.get("count")));
}
}
------------------------------------------------
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
</property>
</bean>
-->
<bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsFactory" />
<property name="defaultDestination" ref="destination" />
<property name="messageConverter">
<bean class="org.springframework.jms.support.converter.SimpleMessageConverter" />
</property>
</bean>
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="my-queue" />
</bean>
</beans>
十一月 18th, 2011
JDom Dom4j xstream digester or Castor ?
日常开发中遇到越来越多的xml文档,java中如何对这些xml文档进行解析. google了下, 收集了几篇文章如下:
http://lavasoft.blog.51cto.com/62575/307808 Castor实现XML与Java的互转
http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html xStream完美转换XML、JSON
http://www.cnblogs.com/hoojo/archive/2011/04/25/2026819.html 用Castor 处理XML文档
http://blog.csdn.net/thunder09/article/details/5555946 打造完美的xml技术解决方案(dom4j/xstream)
近期评论