<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: binbingoloo</title>
    <description>The latest articles on Forem by binbingoloo (@binbingoloo).</description>
    <link>https://forem.com/binbingoloo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3415974%2F50a730bf-6419-40be-a95a-e79fbc9234ae.png</url>
      <title>Forem: binbingoloo</title>
      <link>https://forem.com/binbingoloo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/binbingoloo"/>
    <language>en</language>
    <item>
      <title>2025 macOS Development Environment Setup Guide</title>
      <dc:creator>binbingoloo</dc:creator>
      <pubDate>Fri, 08 Aug 2025 18:15:02 +0000</pubDate>
      <link>https://forem.com/binbingoloo/2025-macos-development-environment-setup-guide-4jj0</link>
      <guid>https://forem.com/binbingoloo/2025-macos-development-environment-setup-guide-4jj0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A comprehensive guide to setting up a modern development environment on macOS with essential tools, terminal customization, and productivity applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Full Configurations: &lt;a href="https://github.com/binbingoloo/.dotfiles" rel="noopener noreferrer"&gt;https://github.com/binbingoloo/.dotfiles&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
🍎 macOS Development Environment Setup Guide 2025

&lt;ul&gt;
&lt;li&gt;📋 Table of Contents&lt;/li&gt;
&lt;li&gt;🎯 Overview&lt;/li&gt;
&lt;li&gt;What's Included&lt;/li&gt;
&lt;li&gt;🚀 Getting Started&lt;/li&gt;
&lt;li&gt;Xcode Command Line Tools&lt;/li&gt;
&lt;li&gt;Homebrew Package Manager&lt;/li&gt;
&lt;li&gt;🖥️ Terminal Setup&lt;/li&gt;
&lt;li&gt;Oh My Zsh&lt;/li&gt;
&lt;li&gt;Powerlevel10k Theme&lt;/li&gt;
&lt;li&gt;
Zsh Plugins

&lt;ul&gt;
&lt;li&gt;1. Zsh Completions&lt;/li&gt;
&lt;li&gt;2. Zsh Autosuggestions&lt;/li&gt;
&lt;li&gt;3. Zsh Syntax Highlighting&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Terminal Fonts&lt;/li&gt;

&lt;li&gt;💻 Development Environment&lt;/li&gt;

&lt;li&gt;Language Version Managers&lt;/li&gt;

&lt;li&gt;IDEs &amp;amp; Development Tools&lt;/li&gt;

&lt;li&gt;

CLI Power Tools

&lt;ul&gt;
&lt;li&gt;Additional Setup&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;🎨 Productivity Applications&lt;/li&gt;

&lt;li&gt;🔧 Dotfiles Configuration&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Overview
&lt;/h2&gt;

&lt;p&gt;This guide provides a step-by-step approach to setting up a professional development environment on macOS. It covers everything from basic command-line tools to advanced terminal customization and productivity applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Included
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Package management with Homebrew&lt;/li&gt;
&lt;li&gt;✅ Beautiful and functional terminal with Oh My Zsh and Powerlevel10k&lt;/li&gt;
&lt;li&gt;✅ Version managers for Node.js, Python, Java, and Rust&lt;/li&gt;
&lt;li&gt;✅ Essential development tools and IDEs&lt;/li&gt;
&lt;li&gt;✅ Powerful CLI utilities for enhanced productivity&lt;/li&gt;
&lt;li&gt;✅ Dotfiles management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Xcode Command Line Tools
&lt;/h3&gt;

&lt;p&gt;First, install Xcode Command Line Tools which are required by many development tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xcode-select &lt;span class="nt"&gt;--install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Required for:&lt;/strong&gt; Homebrew, Rust, Python native extensions, Git, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Homebrew Package Manager
&lt;/h3&gt;

&lt;p&gt;Install &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;, the missing package manager for macOS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add Homebrew to your PATH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(/opt/homebrew/bin/brew shellenv)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zprofile
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;/opt/homebrew/bin/brew shellenv&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; Homebrew manages both CLI tools and GUI applications (via cask), providing a foundation for clean installs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🖥️ Terminal Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Oh My Zsh
&lt;/h3&gt;

&lt;p&gt;Install &lt;a href="https://github.com/ohmyzsh/ohmyzsh" rel="noopener noreferrer"&gt;Oh My Zsh&lt;/a&gt;, a delightful framework for managing your Zsh configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Note:&lt;/strong&gt; Oh My Zsh will overwrite your existing &lt;code&gt;~/.zshrc&lt;/code&gt;. Make sure to append &lt;code&gt;.zshrc.pre-oh-my-zsh&lt;/code&gt; to the new &lt;code&gt;~/.zshrc&lt;/code&gt; if needed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Powerlevel10k Theme
&lt;/h3&gt;

&lt;p&gt;Install &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;Powerlevel10k&lt;/a&gt;, a fast and flexible Zsh theme:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 https://github.com/romkatv/powerlevel10k.git &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/themes/powerlevel10k"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update your &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"powerlevel10k/powerlevel10k"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure Powerlevel10k:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Zsh Plugins
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Zsh Completions
&lt;/h4&gt;

&lt;p&gt;Additional completion definitions for Zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-completions.git &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-${&lt;/span&gt;&lt;span class="nv"&gt;ZSH&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add to &lt;code&gt;~/.zshrc&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; sourcing oh-my-zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# zsh-completions&lt;/span&gt;
fpath+&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-${&lt;/span&gt;&lt;span class="nv"&gt;ZSH&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-completions/src
autoload &lt;span class="nt"&gt;-U&lt;/span&gt; compinit &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; compinit

&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="nv"&gt;$ZSH&lt;/span&gt;/oh-my-zsh.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Zsh Autosuggestions
&lt;/h4&gt;

&lt;p&gt;Fish-like autosuggestions for Zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Zsh Syntax Highlighting
&lt;/h4&gt;

&lt;p&gt;Fish shell-like syntax highlighting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update plugins in &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Terminal Fonts
&lt;/h3&gt;

&lt;p&gt;Install Nerd Fonts for better terminal experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; font-hack-nerd-font
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; font-jetbrains-mono-nerd-font
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💻 Development Environment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Language Version Managers
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Best Practice:&lt;/strong&gt; Avoid installing Node, Python, or Java directly. Use version managers instead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Installation&lt;/th&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;nvm&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install nvm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;See below&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;pyenv&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install pyenv&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;See below&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;sdkman&lt;/td&gt;
&lt;td&gt;`curl -s "&lt;a href="https://get.sdkman.io/" rel="noopener noreferrer"&gt;https://get.sdkman.io/&lt;/a&gt;" \&lt;/td&gt;
&lt;td&gt;bash`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rust&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;rustup&lt;/td&gt;
&lt;td&gt;`curl --proto '=https' --tlsv1.2 -sSf &lt;a href="https://sh.rustup.rs" rel="noopener noreferrer"&gt;https://sh.rustup.rs&lt;/a&gt; \&lt;/td&gt;
&lt;td&gt;sh`&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Add to your &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# NVM&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"/opt/homebrew/opt/nvm/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"/opt/homebrew/opt/nvm/nvm.sh"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"&lt;/span&gt;

&lt;span class="c"&gt;# Pyenv&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PYENV_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.pyenv"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PYENV_ROOT&lt;/span&gt;&lt;span class="s2"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;pyenv init &lt;span class="nt"&gt;--path&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;pyenv init -&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# SDKMAN - THIS MUST BE AT THE END OF THE FILE&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SDKMAN_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.sdkman"&lt;/span&gt;
&lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.sdkman/bin/sdkman-init.sh"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.sdkman/bin/sdkman-init.sh"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  IDEs &amp;amp; Development Tools
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; visual-studio-code
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; intellij-idea-ce
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; postman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CLI Power Tools
&lt;/h3&gt;

&lt;p&gt;Essential command-line tools for enhanced productivity:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Installation&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WezTerm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask wezterm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPU-accelerated terminal emulator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;tmux&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install tmux&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Terminal multiplexer for multiple sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Neovim&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install neovim&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hyperextensible Vim-based text editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;zoxide&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install zoxide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Smart cd command with directory history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;fzf&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install fzf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fuzzy finder for files/history/search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install fd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fast and user-friendly alternative to find&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ripgrep&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install ripgrep&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lightning-fast recursive file search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;bat&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install bat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cat clone with syntax highlighting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;lsd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install lsd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modern ls with icons and colors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;git-delta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install git-delta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Syntax-highlighting pager for git&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;jq&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install jq&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Command-line JSON processor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;lazygit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install lazygit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Simple terminal UI for git commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;gh&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install gh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GitHub's official command line tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;htop/btop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install htop btop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Interactive process viewers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Additional Setup
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;zoxide&lt;/strong&gt; - Add to &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;zoxide init zsh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;fzf&lt;/strong&gt; - Run the install script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="si"&gt;$(&lt;/span&gt;brew &lt;span class="nt"&gt;--prefix&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/opt/fzf/install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;fzf-tab&lt;/strong&gt; - Enhanced tab completions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Aloxaf/fzf-tab &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/fzf-tab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎨 Productivity Applications
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Application&lt;/th&gt;
&lt;th&gt;Installation&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask notion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All-in-one workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Obsidian&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask obsidian&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Knowledge base with local Markdown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discord&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask discord&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Communication platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;System monitoring in menu bar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ice&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask jordanbaird-ice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Menu bar organizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KeyCastr&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask keycastr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Keystroke visualizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flameshot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask flameshot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Screenshot and annotation tool&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔧 Dotfiles Configuration
&lt;/h2&gt;

&lt;p&gt;Create symbolic links for your dotfiles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create symlinks for configuration files&lt;/span&gt;
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.zprofile ~/.zprofile
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.zshrc ~/.zshrc
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.vimrc ~/.vimrc
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.tmux.conf ~/.tmux.conf
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.p10k.zsh ~/.p10k.zsh
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.gitmessage ~/.gitmessage
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.gitconfig ~/.gitconfig
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.fzf.zsh ~/.fzf.zsh
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.editorconfig ~/.editorconfig
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.config/nvim ~/.config/nvim
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.config/lazygit/config.yml ~/Library/Application&lt;span class="se"&gt;\ &lt;/span&gt;Support/lazygit/config.yml
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.config/bat ~/.config/bat
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.config/lsd ~/.config/lsd
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/.config/wezterm ~/.config/wezterm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






</description>
      <category>macos</category>
      <category>development</category>
      <category>terminal</category>
      <category>ohmyzsh</category>
    </item>
    <item>
      <title>"SOAP 1.1 endpoint already registered" - Spring 6 and CXF 4 Integration Issue</title>
      <dc:creator>binbingoloo</dc:creator>
      <pubDate>Wed, 06 Aug 2025 06:23:47 +0000</pubDate>
      <link>https://forem.com/binbingoloo/soap-11-endpoint-already-registered-spring-6-and-cxf-4-integration-issue-bci</link>
      <guid>https://forem.com/binbingoloo/soap-11-endpoint-already-registered-spring-6-and-cxf-4-integration-issue-bci</guid>
      <description>&lt;p&gt;During our recent upgrade from Spring 3 to Spring 6 while using CXF 4, we encountered a perplexing issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SOAP 1.1 endpoint already registered on address /soap/xxxService&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Root Cause
&lt;/h2&gt;

&lt;p&gt;We discovered that &lt;strong&gt;Spring 6's enhanced bean lifecycle management conflicts with CXF's endpoint registration mechanism&lt;/strong&gt;. Here's what happens:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Spring 6 Configuration Loading Changes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Spring 6 introduced stricter bean definition and lifecycle management, which can cause CXF endpoints to be registered multiple times through different mechanisms:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Multiple registration paths:&lt;/span&gt;
&lt;span class="c1"&gt;// 1. Auto-discovery via @WebService annotations&lt;/span&gt;
&lt;span class="c1"&gt;// 2. Explicit XML configuration&lt;/span&gt;
&lt;span class="c1"&gt;// 3. Java-based configuration&lt;/span&gt;
&lt;span class="c1"&gt;// 4. CXF's internal auto-configuration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. &lt;strong&gt;The Duplicate Registration Scenario&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Without proper CXF initialization, endpoints get registered multiple times:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- XML Configuration --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;jaxws:endpoint&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"xxxService"&lt;/span&gt; 
                &lt;span class="na"&gt;implementor=&lt;/span&gt;&lt;span class="s"&gt;"#xxxServiceImpl"&lt;/span&gt;
                &lt;span class="na"&gt;address=&lt;/span&gt;&lt;span class="s"&gt;"/soap/xxxService"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Component Scanning might also pick up the same service --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;context:component-scan&lt;/span&gt; &lt;span class="na"&gt;base-package=&lt;/span&gt;&lt;span class="s"&gt;"com.example.service"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. &lt;strong&gt;Missing CXF Core Configuration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Spring 6 no longer automatically loads certain CXF configurations that were previously handled implicitly, leading to an improperly initialized CXF Bus and DestinationRegistry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Importing CXF Configuration Files Solves the Issue
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Role of &lt;code&gt;cxf.xml&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;META-INF/cxf/cxf.xml&lt;/code&gt; file contains essential CXF infrastructure beans:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;beans&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.springframework.org/schema/beans"&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- CXF Bus - the core of CXF --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;bean&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"cxf"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"org.apache.cxf.bus.spring.SpringBus"&lt;/span&gt; &lt;span class="na"&gt;destroy-method=&lt;/span&gt;&lt;span class="s"&gt;"shutdown"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Ensures Bus singleton pattern --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;bean&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor"&lt;/span&gt;
          &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/beans&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;Add the imports to your Spring configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;beans&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.springframework.org/schema/beans"&lt;/span&gt;
       &lt;span class="na"&gt;xmlns:xsi=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt;
       &lt;span class="na"&gt;xmlns:jaxws=&lt;/span&gt;&lt;span class="s"&gt;"http://cxf.apache.org/jaxws"&lt;/span&gt;
       &lt;span class="na"&gt;xsi:schemaLocation=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Import CXF core configurations --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;import&lt;/span&gt; &lt;span class="na"&gt;resource=&lt;/span&gt;&lt;span class="s"&gt;"classpath:META-INF/cxf/cxf.xml"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Your endpoint definitions --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;jaxws:endpoint&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"xxxService"&lt;/span&gt;
                    &lt;span class="na"&gt;implementor=&lt;/span&gt;&lt;span class="s"&gt;"com.example.service.XxxServiceImpl"&lt;/span&gt;
                    &lt;span class="na"&gt;address=&lt;/span&gt;&lt;span class="s"&gt;"/soap/xxxService"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;jaxws:properties&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;entry&lt;/span&gt; &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"schema-validation-enabled"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/jaxws:properties&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/jaxws:endpoint&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/beans&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The imported configurations guarantee that only one CXF Bus is created and properly initialized. The DestinationRegistry from &lt;code&gt;cxf-servlet.xml&lt;/code&gt; maintains a single registry of all endpoints Explicit configuration takes precedence over any auto-discovery mechanisms.&lt;/p&gt;

</description>
      <category>java</category>
      <category>webdev</category>
      <category>soap</category>
      <category>spring</category>
    </item>
    <item>
      <title>"No qualifying bean of type 'jakarta.xml.ws.WebServiceContext' available"</title>
      <dc:creator>binbingoloo</dc:creator>
      <pubDate>Wed, 06 Aug 2025 03:57:58 +0000</pubDate>
      <link>https://forem.com/binbingoloo/no-qualifying-bean-of-type-jakartaxmlwswebservicecontext-available-2pc2</link>
      <guid>https://forem.com/binbingoloo/no-qualifying-bean-of-type-jakartaxmlwswebservicecontext-available-2pc2</guid>
      <description>&lt;h2&gt;
  
  
  Description
&lt;/h2&gt;

&lt;p&gt;We recently undertook a major technology stack upgrade, migrating from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JDK 8&lt;/strong&gt; → &lt;strong&gt;JDK 21&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spring 3&lt;/strong&gt; → &lt;strong&gt;Spring 6.x&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSphere (WAS)&lt;/strong&gt; → &lt;strong&gt;Tomcat 10&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CXF&lt;/strong&gt; → &lt;strong&gt;CXF 4.x&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During this migration, we encountered the following error:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;No qualifying bean of type 'jakarta.xml.ws.WebServiceContext' available&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7cxmemkckp3kmfoyba5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7cxmemkckp3kmfoyba5.png" alt=" " width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Root Cause
&lt;/h2&gt;

&lt;p&gt;After extensive investigation, we discovered that &lt;strong&gt;Spring 6 removed the built-in JAX-WS support&lt;/strong&gt; that was previously available in Spring 5 and earlier versions. This change wasn't prominently documented in the Spring 6 migration guide, making it a hidden pitfall for teams upgrading legacy applications.&lt;/p&gt;

&lt;p&gt;The issue occurs because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Spring's &lt;code&gt;CommonAnnotationBeanPostProcessor&lt;/code&gt; tries to inject &lt;code&gt;WebServiceContext&lt;/code&gt; as a regular Spring bean&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WebServiceContext&lt;/code&gt; is not a Spring-managed bean - it should be handled by the JAX-WS runtime (CXF in our case)&lt;/li&gt;
&lt;li&gt;Spring 6 no longer automatically excludes &lt;code&gt;WebServiceContext&lt;/code&gt; from dependency injection&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Research and References
&lt;/h2&gt;

&lt;p&gt;During our investigation, we found several relevant resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://issues.apache.org/jira/browse/CXF-8666?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel&amp;amp;focusedCommentId=17709269" rel="noopener noreferrer"&gt;Spring6 for JSR 250 annotations isn't disabled for jakarta.xml.ws.WebServiceContext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://access.redhat.com/solutions/7109379" rel="noopener noreferrer"&gt;"No qualifying bean of type 'jakarta.xml.ws.WebServiceContext' available" migrating to EAP 8.0.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/a/77235884" rel="noopener noreferrer"&gt;Spring Boot 3 Update: No qualifying bean of type 'jakarta.xml.ws.WebServiceContext' available&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key insights from these resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/spring-projects/spring-framework/issues/27422" rel="noopener noreferrer"&gt;Spring Framework removed JAX-WS support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://issues.apache.org/jira/browse/CXF-8666" rel="noopener noreferrer"&gt;CXF issue tracking this problem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For Spring Framework Applications (Our Case)
&lt;/h3&gt;

&lt;p&gt;Since we're using Spring Framework without Spring Boot, we adapted the &lt;a href="https://github.com/apache/cxf/blob/main/integration/spring-boot/autoconfigure/src/main/java/org/apache/cxf/spring/boot/autoconfigure/jaxws/CxfJaxwsAutoConfiguration.java" rel="noopener noreferrer"&gt;CxfJaxwsAutoConfiguration&lt;/a&gt; from Spring Boot for our application.&lt;/p&gt;

&lt;p&gt;Here's how Spring Boot handles it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="nd"&gt;@ConditionalOnClass&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt; &lt;span class="nc"&gt;Resource&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;WebServiceContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt; &lt;span class="o"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CxfJaxwsAutoConfiguration&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;BeanFactoryPostProcessor&lt;/span&gt; &lt;span class="nf"&gt;jaxwsBeanFactoryPostProcessor&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;BeanFactoryPostProcessor&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nd"&gt;@Override&lt;/span&gt;
            &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;postProcessBeanFactory&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ConfigurableListableBeanFactory&lt;/span&gt; &lt;span class="n"&gt;beanFactory&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;BeansException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;beans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;beanFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBeansOfType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;CommonAnnotationBeanPostProcessor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
                &lt;span class="c1"&gt;// The {@code javax.xml.ws.WebServiceContext} interface should be ignored since it will &lt;/span&gt;
                &lt;span class="c1"&gt;// be resolved by the CXF's JAX-WS runtime.&lt;/span&gt;
                &lt;span class="n"&gt;beans&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bean&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;bean&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ignoreResourceType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WebServiceContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;()));&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;};&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Our Implementation
&lt;/h3&gt;

&lt;p&gt;We created a custom configuration class for our Spring Framework application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt; &lt;span class="nn"&gt;com.yourcompany.config&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;jakarta.annotation.Resource&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;jakarta.xml.ws.WebServiceContext&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.beans.BeansException&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.beans.factory.config.BeanFactoryPostProcessor&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.beans.factory.config.ConfigurableListableBeanFactory&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.context.annotation.Bean&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.context.annotation.CommonAnnotationBeanPostProcessor&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.context.annotation.Configuration&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CxfJaxwsConfiguration&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;BeanFactoryPostProcessor&lt;/span&gt; &lt;span class="nf"&gt;jaxwsBeanFactoryPostProcessor&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;BeanFactoryPostProcessor&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nd"&gt;@Override&lt;/span&gt;
            &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;postProcessBeanFactory&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ConfigurableListableBeanFactory&lt;/span&gt; &lt;span class="n"&gt;beanFactory&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;BeansException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Check if the required classes are available&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;isClassPresent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"jakarta.annotation.Resource"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
                    &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;isClassPresent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"jakarta.xml.ws.WebServiceContext"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;

                &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;beans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;beanFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBeansOfType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;CommonAnnotationBeanPostProcessor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
                &lt;span class="c1"&gt;// Tell Spring to ignore WebServiceContext for dependency injection&lt;/span&gt;
                &lt;span class="c1"&gt;// CXF's JAX-WS runtime will handle it instead&lt;/span&gt;
                &lt;span class="n"&gt;beans&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bean&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;bean&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ignoreResourceType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WebServiceContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;()));&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;};&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;isClassPresent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;className&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;className&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;CxfJaxwsConfiguration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getClassLoader&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ClassNotFoundException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;BeanFactoryPostProcessor&lt;/code&gt; runs early in the Spring context initialization&lt;/li&gt;
&lt;li&gt;It finds all &lt;code&gt;CommonAnnotationBeanPostProcessor&lt;/code&gt; instances&lt;/li&gt;
&lt;li&gt;It instructs them to ignore &lt;code&gt;WebServiceContext&lt;/code&gt; when processing &lt;code&gt;@Resource&lt;/code&gt; annotations&lt;/li&gt;
&lt;li&gt;This allows CXF's JAX-WS runtime to properly inject &lt;code&gt;WebServiceContext&lt;/code&gt; instead of Spring trying to find it as a bean&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hope this helps others facing the same issue during their Spring 6 migration!&lt;/p&gt;

</description>
      <category>java</category>
      <category>webdev</category>
      <category>spring</category>
      <category>soap</category>
    </item>
  </channel>
</rss>
