eclipes4j's 개발은 언제나 즐겁다.

Weblogic 9.2 에서 CXF 사용할 경우.

Programming!

WebLogic

There are two ways to deploy a CXF WAR archive in WebLogic. (Note: This has been validated on WebLogic9.2.)

Put jars in endorsed folder

  • Put the geronimo-ws-metadata_2.0_spec-1.1.1.jar in the $Weblogic_Home/jdk_../jre/lib/endorsed folder.
  • Deploy the CXF war in weblogic.
    (This way is not recommended, since it might break the application server itself. The method below is preferred, as it impacts a single module only.)

Pack war in an ear, deploy the ear with weblogic-application.xml

  • Create a standard J2EE application.xml file in the META-INF folder. (Take $CXF_HOME/samples/java_first_spring_support for example)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE application PUBLIC
    		"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    		"http://java.sun.com/dtd/application_1_3.dtd">
    <application>
    	<display-name>spring_http</display-name>
    	<module>
    		<web>
    			<web-uri>spring_http.war</web-uri>
    			<context-root>spring</context-root>
    		</web>
    	</module>
    </application>
  • Create a weblogic-application.xml (Weblogic specific) in the META-INF folder.
    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
    	<application-param>
    		<param-name>webapp.encoding.default</param-name>
    		<param-value>UTF-8</param-value>
    	</application-param>
    	<prefer-application-packages>
    		<package-name>javax.jws.*</package-name>
    	</prefer-application-packages>
    </weblogic-application>

The prefer-application-packages element you see above sets up WebLogic's Filtering Classloader. Each class whose package matches one of the package-name elements listed will be searched for first within the EAR before relying on the WebLogic system classloader's version. If a package for a particular class is not listed here, WebLogic will try to load its own (possibly older) version first, so if you are getting deployment errors due to any particular class you might wish to add its package here.

Also note you can, and may need to, specify other options in the weblogic-application.xml file such as XML processing factories as shown here. See the WebLogic guide for more information.

  • Run "jar cvf ..." command to create the ear and then deploy it. Alternatively, this blog entry provides a Mavenized method of building the EAR.





Put the geronimo-ws-metadata_2.0_spec-1.1.1.jar in the $Weblogic_Home/jdk_../jre/lib/endorsed folder.
개인적으로 jdk../lib 안으로 뭔 jar파일 넣는걸 싫어해서 env설정에 추가했다. 뭐가 좋은지는 모르지만 콜록..
xml은 굳이 안해줘도 된다.

허벌나게 힘들게 만들었던 CXF Restful의 JSON 출력

Programming!
Jaxb 의 schema 를 지정합니다. package-info.java

XmlSchema (namespace = "http://kr.or.eclipse4j.service.domain",
      elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

package kr.or.eclipse4j.service.domain
import javax.xml.bind.annotation.XmlSchema;


serviceContext-rest.xml 에 Json Provider 를 지정해 줍니다.

<jaxrs:server id="openApiService" address="/">
  <jaxrs:serviceBeans>
   <ref bean="categoryRestService" />
  </jaxrs:serviceBeans>
  <jaxrs:providers>
   <bean class="org.apache.cxf.jaxrs.provider.JSONProvider">
    <property name="namespaceMap" ref="jsonNamespace" />
   </bean>
  </jaxrs:providers>
</jaxrs:server>


jsonNamespace 를 지정해줘야 합니다.

xmlns:util="http://www.springframework.org/schema/util"
...
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
...

 <util:map id="jsonNamespace" map-class="java.util.Hashtable">
  <entry key="http://kr.or.eclipse4j.service.domain"
   value="" />
  <entry key="http://cxf.apache.org/bindings/xformat" value="cxf" />
 </util:map>
를 지정해줘야 합니다.



소스상에는 당연히
@ProduceMime("application/json")
들어가야 겠죠.