2011-12-02 4 views
3

서비스 응답에 MimeMessage 객체를 포함해야했습니다. 그래서 기본적으로 base64binary 유형을 사용하기로 결정했습니다. 메시지는 코드에 의해 제조된다 :jaxb base64binary 인코딩/디코딩

//message is a MimeMessage type 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
message.writeTo(baos); 
byte[] bytes = baos.toByteArray(); 
content.setMessageContent(bytes); 

및 스키마에이 표시됩니다 :

<xs:simpleType name="MessageContent"> 
    <xs:restriction base="xs:base64Binary"> 
     <xs:whiteSpace value="collapse" fixed="true"/> 
    </xs:restriction> </xs:simpleType> 

내가 제대로 인코딩되지 않는 문자와 반응을 얻고있다. 예 : % 3D= 3D으로 변환되었지만 단지 =이어야합니다.

코딩과 관련이있을 수 있지만 marhaller와 unmarshaller는 모두 UTF-8을 기본값으로 사용하고 있다고 생각합니다.

모든 팁이 도움이 될 것입니다. 감사합니다. 마렉.

답변

1

나는 내 끝에 이걸 빨리 시험해 보았다. 문제를 일으킬 수있는 게시물을 게시하지 않았습니다. NetBeans 7.1을 사용하여 클래스를 생성했습니다 (모두 기본적으로 제공됨). 그것을 시도하고, 당신이 동일한 결과를 얻는 지보십시오. 그리고 ... 알려 주시기 바랍니다

XSD :

<?xml version="1.0" encoding="utf-8" ?> 
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Message"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="content" type="MessageContent"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 

    <xsd:simpleType name="MessageContent"> 
     <xsd:restriction base="xsd:base64Binary"> 
      <xsd:whiteSpace fixed="true" value="collapse"/> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:schema> 

자바 코드 :

JAXBContext jc = JAXBContext.newInstance(("org.tempuri.xmlschema")); 
Marshaller m = jc.createMarshaller(); 
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
ObjectFactory o = new ObjectFactory(); 
Message msg = o.createMessage(); 
byte[] data = new byte[] {0x45, 0x31}; 
msg.setContent(data); 
m.marshal(msg, System.out); 

결과 : 답변

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Message xmlns="http://tempuri.org/XMLSchema.xsd"> 
    <content>RTE=</content> 
</Message> 
+0

감사, 병 추출물 좀 더 코드를 작성하고 내 게시물을 업데이트하십시오. – Marek